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 № 1Im 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}, ()=>[]);