/ / Array mit vorgefüllten Arrays anklicken setzt alle Elemente [duplizieren] - Javascript, Arrays, füllen

Push auf Array von vorgefüllten Arrays setzt alle Elemente [Duplizieren] - Javascript, Arrays, füllen

Ich kämpfe mit einem seltsamen Array.prototype.fill Verhalten:

const arr = new Array(5)
.fill([]);
arr[0].push("element pushed to 0 only");
console.log(arr[1]); // ["element pushed to 0 only"]

Alle Elemente innerhalb des Arrays werden mit dieser Zeichenfolge gefüllt. Ich nehme das alles an [] array-s zeigen auf dasselbe array, aber ich verstehe nicht warum, könnte jemand das erklären?

Antworten:

1 für die Antwort № 1

Im fill([]), das Argument [] wird vor dem Aufruf von ausgewertet fill.

Es ist dasselbe wie

const subarray = [];
const arr = new Array(5);
arr.fill(subarray);

Das ist das Gleiche wie

const subarray = [];
const arr = new Array(5);
for (var i=0; i<arr.length; i++) arr[i] = subarray;

Mit anderen Worten, Sie haben bei allen Indizes das gleiche Sub-Array: arr[1] ist arr[0].

Wenn Sie verschiedene Subarrays haben möchten, können Sie dies tun

const arr = Array.from({length:5}, ()=>[]);