Array Comprehensions verwenden
In JavaScript 1.7 und höher können Sie Array-Begriffe um zweidimensionale Arrays zu erstellen. Außerdem können Sie die Einträge beim Füllen des Arrays filtern und/oder manipulieren und müssen keine Schleifen verwenden.
var rows = [1, 2, 3];
var cols = ["a", "b", "c", "d"];
var grid = [ for (r of rows) [ for (c of cols) r+c ] ];
/*
grid = [
["1a","1b","1c","1d"],
["2a","2b","2c","2d"],
["3a","3b","3c","3d"]
]
*/
Sie können jede n x m
Array und füllen Sie es mit einem Standardwert, indem Sie
var default = 0; // your 2d array will be filled with this value
var n_dim = 2;
var m_dim = 7;
var arr = [ for (n of Array(n_dim)) [ for (m of Array(m_dim) default ]]
/*
arr = [
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0],
]
*/
Weitere Beispiele und Dokumentationen finden Sie unter aquí .
Bitte beachten Sie, dass dies noch keine Standardfunktion ist. .
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));