Erstellen eines leeren zweidimensionalen Arrays (einzeilig)
Array.from(Array(2), () => new Array(4))
2 und 4 sind die erste bzw. zweite Dimension.
Wir machen Gebrauch von Array.from
die einen array-ähnlichen Parameter und eine optionale Zuordnung für jedes der Elemente annehmen kann.
Array.from(arrayLike[, mapFn[, thisArg]])
var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);
Derselbe Trick kann verwendet werden, um Erstellen Sie ein JavaScript-Array mit 1...N
Alternativ (aber ineffizienter 12% mit n = 10,000
)
Array(2).fill(null).map(() => Array(4))
Der Leistungsabfall ist darauf zurückzuführen, dass die ersten Dimensionswerte initialisiert werden müssen, um die .map
. Denken Sie daran, dass Array
wird die Positionen erst dann zuweisen, wenn Sie dies über .fill
oder direkte Wertzuweisung.
var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);
Weiterverfolgung
Hier ist eine Methode, die korrekt zu sein scheint, hat aber Probleme .
Array(2).fill(Array(4)); // BAD! Rows are copied by reference
Es liefert zwar das scheinbar gewünschte zweidimensionale Array ( [ [ <4 empty items> ], [ <4 empty items> ] ]
), gibt es einen Haken: Die Arrays der ersten Dimension wurden per Referenz kopiert. Das bedeutet, dass ein arr[0][0] = 'foo'
würde tatsächlich zwei Zeilen statt einer ändern.
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);
26 Stimmen
Ausgehend von einer etwas pedantischen Definition ist es technisch unmöglich, ein 2d-Array in Javascript zu erstellen. Aber Sie können ein Array von Arrays erstellen, die gleichbedeutend mit dem gleichen ist.
0 Stimmen
Duplikat von - stackoverflow.com/q/6495187/104380
0 Stimmen
Für ein 5x3 2D-Array würde ich wie folgt vorgehen
var arr2D = new Array(5).fill(new Array(3));
Wenn Sie außerdem nicht wollen, dass die Zellen "undefiniert" sind, können Sie wie folgt vorgehenvar arr2D = new Array(5).fill(new Array(3).fill("hey"));
22 Stimmen
FYI... wenn Sie ein Array mit weiteren Arrays füllen, indem Sie
var arr2D = new Array(5).fill(new Array(3));
wird jedes Element von Array(5) auf dasselbe Array(3) verweisen. Daher ist es am besten, eine for-Schleife zu verwenden, um die Unterarrays dynamisch zu füllen.91 Stimmen
a = Array(5).fill(0).map(x => Array(10).fill(0))
0 Stimmen
@JoshStribling Können Sie mir bitte erklären, warum es so ist, dass
var arr2D = new Array(5).fill(new Array(3));
nicht richtig ein 2d-Array erstellt?0 Stimmen
@MarksCode Es wird technisch gesehen ein 2D-Array erstellt, aber es wird ein Array sein, das mit Verweisen auf das gleiche einzelne Array gefüllt ist, das Sie mit der
new Array(3)
Aufruf, da dieser ausgeführt wird, um ein neues Array zu erstellen, dann wird dieses Array an die Funktion übergeben, um das Array zu füllen, das Sie füllen...5 Stimmen
Mit anderen Worten,
fill
ruft nichtnew Array(3)
für jeden Index des zu füllenden Arrays, da es sich nicht um einen Lambda-Ausdruck oder ähnliches handelt, wie z.B. Longfei Wus Kommentar oben, der das Array zunächst mit 0's füllt und dann die map-Funktion mit einem Lambda verwendet, um jedes Element mit einem neuen Array zu füllen. Die fill-Funktion füllt das Array einfach mit genau dem, was Sie ihr sagen. Ergibt das einen Sinn? Für weitere Informationen über diemap
Funktion, siehe: developer.mozilla.org/de-US/docs/Web/JavaScript/Reference/0 Stimmen
Mögliches Duplikat von Mehrdimensionales JavaScript-Array
0 Stimmen
@Adam diese Frage scheint zwei Jahre älter zu sein als die Frage, die Sie verlinkt haben.
2 Stimmen
@kalehmann das ist gut: meta.stackoverflow.com/a/252017/2311074
If the new question is a better question or has better answers, then vote to close the old one as a duplicate of the new one.
1 Stimmen
Eine leistungsfähige ist
let AA = Array.from({ length: 2 }, () => new Array(3).fill(0));