Ich arbeite an einem Problem, das seine Ergebnisse in ein 2D-Array ausgibt, Hinzufügen von eins zu jedem Element, wie es geht.Array.prototype.fill() anders als füllen, wie ich gehe
Ich vereinfacht den Code so weit wie möglich, um einen Testfall zu erstellen. Wenn ich das Array als ein fülle ich gehen, wie folgt:
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 ein 2D-Array erhalten, wo alle Werte sind 1. Wenn ich jedoch das Array mit array.prototype.fill() prefill wie folgt:
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 bekomme ein 2D-Array voller 6s. Selbst wenn ich a[d1][d2] += 1
mit dem alten a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;
ersetze (was noch funktionieren sollte, da sowohl 0 als auch undefined falsch sind), bekomme ich immer noch 6s.
Soweit ich sagen kann, sollte mein Code nur durch jedes Element durchlaufen und eins zum vorherigen Wert hinzufügen. Es sollte kein Element mehr als einmal berühren, also sollten alle 1s sein. Ob ich das Array im Voraus füllte oder nicht, sollte keine Rolle spielen.
Wo ist der Fehler in meinem Verständnis?
Pop-Quiz: Wie viele neue Array-Objekte funktioniert die Zeile 'new Array (6) .fill (new Array (6) .fill (0)); 'erstellen? (Hinweis: Es ist die gleiche Anzahl wie die Anzahl der 'neuen Array'-Aufrufe in der Zeile.) (Tipp # 2: Es ist weniger als 7 ':)'.) – apsillers