2017-08-08 3 views
0

Ich versuche, die Rohcodes der Reduce-Funktion zu verstehen und wie man sie verwendet.Reduce-Funktion in JavaScript

var each = function(collection, callback){ 
     if(Array.isArray(collection)){ 
      for(var i=0;i<collection.length;i++){ 
       callback(collection[i]); 
      } 
     } 
     else{ 
      for(var key in collection){ 
       callback(collection[key]); 
      } 
     } 
    }; 

var reduce = function(collection, callback, accumulator){ 
    each(collection, function(element){ 
    if(accumulator === undefined) { 
     return accumulator = element; 
    }else { 
     return accumulator = callback(accumulator, element); 
    }; 
}); 

return accumulator; 
}; 

var sArr = [3, 2, 3, 4, 5]; 


each(sArr, function(collection){ 
    console.log(collection); 
}); 

reduce(sArr, function(collection, prev){ 
    console.log(prev = prev + sArr); 
}); 

Auf meine Codes oben wie man sehen kann ich alle meine Arrays in einem Element zu reduzieren versuchte, durch sie alle wie eine normale reduzieren Funktion hinzugefügt wird, aber es die Art und Weise nicht funktioniert ich denke, es ist.

Kann jemand überprüfen, ob ich falsch liege und wenn Sie mir in Laiensprache erklären können, was macht meine Reduce-Funktion Zeile für Zeile?

Sorry Neuling.

+1

Was erwarten Sie und was bekommen Sie? (Ich nehme an, Sie möchten wahrscheinlich, dass Ihre 'reduce'-Funktion tatsächlich einen Wert am Ende zurückgibt) –

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce – Ryan

+0

@ JosiahKeller: Ich bekomme eine Reihe von nubmers anstatt eine Zahl zu reduzieren: "21,2,3,4,5" –

Antwort

3
reduce(sArr, function(collection, prev){ 
    return collection + prev; 
}); 

oder äquivalent

reduce(sArr, (collection, prev) => collection + prev); 

den korrekten Wert zurück. Was Sie haben:

reduce(sArr, function(collection, prev){ 
    console.log(prev = prev + myArr); 
}); 

werden versuchen, nicht vorhandene Wert (myArr) auf das aktuelle Element hinzufügen möchten, dann versuchen Sie es zuweisen zurück auf die lokale Variable (prev), die am Ende der Funktion werden verworfen , dann zeigen Sie es an und geben Sie schließlich undefined an den Akkumulator zurück, da Sie keine return-Funktion haben.

+0

hat es versucht: reduce (sArr, function (sammlung, prev) { return collection + prev; }); aber es gibt mir nichts auf dem Konsolenprotokoll. –

+0

Es gibt keine 'console.log' in' reduce (sArr, function (collection, prev) {return collection + prev;}); '. Haben Sie versucht, 'console.log' zu reduzieren (sArr, function (collection, prev) {return collection + prev;})); '? Weil das "17" druckt. – Amadan

+0

Ich denke, es funktioniert jetzt. Dank dafür. Übrigens, ich bin ein neuer Anfänger. Versuchen Sie bitte zu erklären, was meine Reduce-Funktion Zeile für Zeile macht? Ich bin ein Dummkopf. –

Verwandte Themen