Array.prototype.fill () anders als fill as I go

Ich arbeite an einem Problem, bei dem die Ergebnisse in einem 2D-Array ausgegeben werden, wobei jedem Element nach und nach eines hinzugefügt wird.

I vereinfacht den Code so weit ich konnte runter um einen Testfall zu erstellen. Wenn ich das Array wie folgt ausfülle:

var a = [[], [], [] ,[] ,[], []];
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1; 
    }
}

Ich erhalte ein 2D-Array, in dem alle Werte 1 sind. Wenn ich das Array jedoch mit array.prototype.fill () wie folgt vorfülle:

var a = new Array(6).fill(new Array(6).fill(0));
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] += 1; 
    }
}

Ich erhalte ein 2D-Array mit 6s. Auch wenn ich @ erseta[d1][d2] += 1 mit dem altena[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;, (was immer noch funktionieren sollte, da sowohl 0 als auch undefined falsch sind) Ich bekomme immer noch 6s.

Soweit ich das beurteilen kann, sollte mein Code einfach durch jedes Element laufen und eins zum vorherigen Wert hinzufügen. Es sollte kein Element mehr als einmal berühren, daher sollten alle 1s sein. Ob ich das Array vorher fülle oder nicht, sollte keine Rolle spielen.

Wo ist der Fehler in meinem Verständnis?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage