Ich habe mich immer gefragt, was der Unterschied zwischen ihnen ist. Sie scheinen alle dasselbe zu tun ...
Ich habe mich immer gefragt, was der Unterschied zwischen ihnen ist. Sie scheinen alle dasselbe zu tun ...
Antworten:
Der Unterschied liegt in den Rückgabewerten.
.map()
Gibt ein neues Array von Objekten zurück, das durch Ausführen einer Aktion für das ursprüngliche Element erstellt wurde.
.every()
Gibt einen Booleschen Wert zurück - true, wenn jedes Element in diesem Array die bereitgestellte Testfunktion erfüllt. Ein wichtiger Unterschied .every()
besteht darin, dass die Testfunktion möglicherweise nicht immer für jedes Element im Array aufgerufen wird. Sobald die Testfunktion für ein Element false zurückgibt, werden keine Array-Elemente mehr iteriert. Daher sollte die Testfunktion normalerweise keine Nebenwirkungen haben .
.forEach()
gibt nichts zurück - Es iteriert das Array und führt eine bestimmte Aktion für jedes Element im Array aus.
Lesen Sie mehr über diese und die vielen anderen Array-Iterationsmethoden bei MDN .
Die Antwort von gilly3 ist großartig. Ich wollte nur ein paar Informationen über andere Arten von "Loop Through Elements" -Funktionen hinzufügen.
.every()
(stoppt die Schleife, wenn der Iterator zum ersten Mal false oder etwas Falsey zurückgibt).some()
(stoppt die Schleife, wenn der Iterator zum ersten Mal true oder etwas Wahres zurückgibt).filter()
(Erstellt ein neues Array mit Elementen, bei denen die Filterfunktion true zurückgibt, und diejenigen, bei denen false zurückgegeben wird.).map()
(Erstellt ein neues Array aus den von der Iteratorfunktion zurückgegebenen Werten.).reduce()
(baut einen Wert auf, indem der Iterator wiederholt aufgerufen wird und vorherige Werte übergeben werden; Einzelheiten finden Sie in der Spezifikation; nützlich zum Summieren des Inhalts eines Arrays und vieler anderer Dinge).reduceRight()
(wie reduzieren, funktioniert aber eher in absteigender als in aufsteigender Reihenfolge)Gutschrift an: TJCrowder Für jeden über ein Array in JavaScript?
Eine weitere Überlegung zu den oben genannten guten Antworten ist die Verkettung. Mit forEach () können Sie nicht verketten, mit map () jedoch.
Beispielsweise:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
Mit .forEach () können Sie .sort () nicht ausführen. Es wird eine Fehlermeldung angezeigt.
Für Ramda ist der Unterschied zwischen R.map()
und R.forEach()
:
R.forEach()
Gibt das ursprüngliche Array zurück, während R.map()
ein Funktor zurückgegeben wirdR.forEach()
kann nur mit einem Array arbeiten, R.map()
kann aber auch mit einem Objekt arbeiten (dh die Schlüssel / Wert-Paare des Objekts werden wie ein Array behandelt)
every
undforEach
sind nicht jQuery Methoden, ich denke , es ist unwahrscheinlich , dass die Frage nach jQuery bezieht sich in keiner Weise. developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6