Ich habe eine Änderung von Matthew Crumley für die Erstellung einer mehrdimensionalen Array-Funktion. Ich habe die Dimensionen des Arrays hinzugefügt, die als Array-Variable übergeben werden sollen, und es wird eine weitere Variable geben - value
die verwendet werden, um die Werte der Elemente der letzten Arrays in dem mehrdimensionalen Array festzulegen.
/*
* Function to create an n-dimensional array
*
* @param array dimensions
* @param any type value
*
* @return array array
*/
function createArray(dimensions, value) {
// Create new array
var array = new Array(dimensions[0] || 0);
var i = dimensions[0];
// If dimensions array's length is bigger than 1
// we start creating arrays in the array elements with recursions
// to achieve multidimensional array
if (dimensions.length > 1) {
// Remove the first value from the array
var args = Array.prototype.slice.call(dimensions, 1);
// For each index in the created array create a new array with recursion
while(i--) {
array[dimensions[0]-1 - i] = createArray(args, value);
}
// If there is only one element left in the dimensions array
// assign value to each of the new array's elements if value is set as param
} else {
if (typeof value !== 'undefined') {
while(i--) {
array[dimensions[0]-1 - i] = value;
}
}
}
return array;
}
createArray([]); // [] or new Array()
createArray([2], 'empty'); // ['empty', 'empty']
createArray([3, 2], 0); // [[0, 0],
// [0, 0],
// [0, 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));