Ich weiß, dass es viele solche Themen gab. Und ich kenne die Grundlagen: .forEach()
arbeitet mit dem ursprünglichen Array und .map()
mit dem neuen.
In meinem Fall:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
Und das wird ausgegeben:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
Ich kann nicht verstehen, warum die Verwendung von practice
Änderungswerten von b
to undefined
.
Es tut mir leid, wenn dies eine dumme Frage ist, aber ich bin ziemlich neu in dieser Sprache und die Antworten, die ich bisher gefunden habe, haben mich nicht befriedigt.
javascript
arrays
loops
foreach
DzikiChrzan
quelle
quelle
.map
Gibt ein neues Array zurück , während.forEach
nichts zurückgegeben wird . Wenn Sie eine geänderte Form des vorherigen Arrays erhalten.map
möchten, verwenden Sie grundsätzlich, wenn Sie dies nicht möchten, verwenden Sie.forEach
.Antworten:
Sie sind nicht ein und dasselbe. Lassen Sie mich den Unterschied erklären.
forEach
: Dies iteriert über eine Liste und wendet eine Operation mit Nebenwirkungen auf jedes Listenmitglied an (Beispiel: Speichern jedes Listenelements in der Datenbank)map
: Dies iteriert über eine Liste, transformiert jedes Mitglied dieser Liste und gibt eine andere Liste derselben Größe mit den transformierten Mitgliedern zurück (Beispiel: Transformieren der Liste von Zeichenfolgen in Großbuchstaben)Verweise
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
quelle
Array.forEach
"Führt eine bereitgestellte Funktion einmal pro Array-Element aus."Array.map
"Erstellt ein neues Array mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element in diesem Array."Gibt
forEach
also eigentlich nichts zurück. Es ruft nur die Funktion für jedes Array-Element auf und dann ist es fertig. Was auch immer Sie innerhalb dieser aufgerufenen Funktion zurückgeben, wird einfach verworfen.Auf der anderen Seite
map
wird die Funktion für jedes Array-Element auf ähnliche Weise aufgerufen, aber anstatt den Rückgabewert zu verwerfen, wird sie erfasst und ein neues Array dieser Rückgabewerte erstellt.Dies bedeutet auch , dass Sie könnte verwenden ,
map
wo immer Sie verwenden ,forEach
aber Sie sollten immer noch nicht tun, so dass Sie nicht sammeln die Rückgabewerte ohne einen bestimmten Zweck. Es ist nur effizienter, sie nicht zu sammeln, wenn Sie sie nicht benötigen.quelle
forEach
wäre es wohl "effizienter" gewesen, alsmap
wenn insbesondere eine Polyfüllung für die UnterstützungforEach
eines älteren Browsers (IE8 oder 9) erforderlich gewesen wäre . Sie müssen die Rückgabe vonmap
nichts zuweisen ; Der Rückgabewert sollte unmittelbar nachmap
der Rückgabe Müll sammeln, wenn die Rückgabe vonmap
nicht zugewiesen ist.forEach
wird konzeptionell noch effizienter und besser für Aufgaben geeignet sein, bei denen Sie keine Ergebnisse sammeln müssen. Und ich weiß nichts über dich, aber 2015 habe ich nicht mehr für IE8 entwickelt (was übrigens auch nicht unterstützt wurdemap
); und IE9 + UnterstützungforEach
. Und tatsächlich beendete Microsoft einen Monat nach meiner Antwort die Unterstützung für diese Browser.map
undforEach
werden Anrufe zurückkehren nur einmal das gesamte Array geschleift wurde durch und der Rückruf für jeden aufgerufen wurde.quelle
Der Hauptunterschied, den Sie kennen müssen, besteht darin,
.map()
ein neues Array zurückzugeben, während.forEach()
dies nicht der Fall ist. Deshalb sehen Sie diesen Unterschied in der Ausgabe..forEach()
arbeitet nur mit jedem Wert im Array.Nachlesen:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNVielleicht möchten Sie auch Folgendes überprüfen: -
Array.prototype.every()
- JavaScript | MDNquelle
forEach: Wenn Sie eine Aktion für die Elemente eines Arrays ausführen möchten und diese für die Schleife verwenden. Das Ergebnis dieser Methode gibt uns keine Ausgabe-Kauf-Schleife durch die Elemente.
map: Wenn Sie eine Aktion für die Elemente eines Arrays ausführen und die Ausgabe Ihrer Aktion in einem Array speichern möchten. Dies ähnelt der for-Schleife innerhalb einer Funktion, die das Ergebnis nach jeder Iteration zurückgibt.
Hoffe das hilft.
quelle
Der Unterschied liegt in dem, was sie zurückgeben. Nach der Ausführung:
gibt ein Array von Elementen zurück, die sich aus der verarbeiteten Funktion ergeben; während:
gibt undefiniert zurück.
quelle
Leistungsanalyse For-Schleifen sind schneller als map oder foreach, wenn die Anzahl der Elemente in einem Array zunimmt.
quelle
map: 1642ms forEach: 885ms for: 748ms
Unterschied zwischen Foreach & Map:
Map () : Wenn Sie map verwenden, kann map durch Iteration des Hauptarrays ein neues Array zurückgeben.
Foreach () : Wenn Sie Foreach verwenden, kann es nicht für jedes iterierende Hauptarray etwas zurückgeben.
useFul-Link : Verwenden Sie diesen Link, um Unterschiede zu verstehen
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
quelle
Eine Sache, die hervorgehoben werden muss, ist, dass foreach nicht initialisierte Werte überspringt, während die Karte dies nicht tut.
quelle
forEach () durchläuft einfach die Elemente. Es wirft Rückgabewerte weg und gibt immer undefiniert zurück. Das Ergebnis dieser Methode gibt uns keine Ausgabe.
Die map () - Schleife durch die Elemente weist Speicher zu und speichert Rückgabewerte durch Iteration des Hauptarrays
Beispiel:
quelle
Map wird implizit zurückgegeben, forEach nicht.
Aus diesem Grund verwenden Sie beim Codieren einer JSX-Anwendung fast immer map anstelle von forEach, um Inhalte in React anzuzeigen .
quelle
forEach () :
Rückgabewert: undefiniert
originalArray: nach dem Methodenaufruf geändert
map () :
Rückgabewert: Neues Array, das mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element im aufrufenden Array gefüllt ist
originalArray: nach dem Methodenaufruf nicht geändert
quelle