Array.fill() in JavaScript: Eine warnende Geschichte von Referenzen vs. Werten
Array.fill() ist eine verwendete JavaScript-Methode um ein Array mit einem angegebenen Wert zu füllen. Es ist jedoch wichtig zu verstehen, dass Array.fill() mit Referenzen und nicht mit Werten arbeitet.
Das Problem: Referenzierung vs. Werte
Bedenken Sie den folgenden Code:
let m = Array(6).fill(Array(12).fill(0)); m[0][0] = 1; console.log(m[1][0]); // Outputs 1 instead of 0
Hier erstellen wir eine 6x12-Matrix mit Array.fill(). Wenn wir jedoch m0 auf 1 setzen, wird m1 unerwartet auch 1. Dies liegt daran, dass Array.fill() innere Arrays erstellt, die alle auf dasselbe Array-Objekt verweisen.
Erwartetes Verhalten: Werte
Anstatt zu referenzieren, möchten wir möglicherweise stattdessen Werte kopieren. Mit anderen Worten, eine Änderung von m0 sollte sich nicht auf m1 auswirken.
Lösung: Verwenden von Array.from()
Um Array.fill() zu zwingen, Werte anstelle von Referenzen zu kopieren , können wir Array.from() wie folgt verwenden:
let m = Array.from({length: 6}, e => Array(12).fill(0)); m[0][0] = 1; console.log(m[1][0]); // Outputs 0 as expected
Array.from() stellt sicher, dass jedes innere Array ein eindeutiges Objekt ist, wodurch unbeabsichtigte Werte verhindert werden Teilen.
Fazit
Beachten Sie bei der Verwendung von Array.fill() den Unterschied zwischen Referenzen und Werten. In Situationen, in denen Sie Werte statt Referenzen kopieren möchten, sollten Sie stattdessen die Verwendung von Array.from() in Betracht ziehen.
Das obige ist der detaillierte Inhalt vonWarum erstellt „Array.fill()' von JavaScript Referenzen statt Kopien und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!