Heim > Web-Frontend > js-Tutorial > Warum erstellt „Array.fill()' von JavaScript Referenzen statt Kopien und wie kann ich das Problem beheben?

Warum erstellt „Array.fill()' von JavaScript Referenzen statt Kopien und wie kann ich das Problem beheben?

Linda Hamilton
Freigeben: 2024-11-30 09:50:15
Original
242 Leute haben es durchsucht

Why Does JavaScript's `Array.fill()` Create References Instead of Copies, and How Can I Fix It?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage