1390 Stimmen

Wie kann ich ein zweidimensionales Array in JavaScript erstellen?

Ich habe im Internet nachgelesen, und an einigen Stellen heißt es, es sei nicht möglich, an anderen wird ein Beispiel genannt, und wieder andere widerlegen das Beispiel usw.

  1. Wie deklariere ich ein 2-dimensionales Array in JavaScript? (vorausgesetzt, es ist möglich)

  2. Wie kann ich auf die Mitglieder zugreifen? ( myArray[0][1] o myArray[0,1] ?)

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

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 vorgehen var arr2D = new Array(5).fill(new Array(3).fill("hey"));

1418voto

Ballsacian1 Punkte 16648
var items = [
  [1, 2],
  [3, 4],
  [5, 6]
];
console.log(items[0][0]); // 1
console.log(items[0][1]); // 2
console.log(items[1][0]); // 3
console.log(items[1][1]); // 4
console.log(items);

44 Stimmen

Es wäre schwierig, ein großes mehrdimensionales Feld auf diese Weise zu initialisieren. Wie auch immer, diese Funktion kann verwendet werden, um eine leere multidimensionale Dimension zu erstellen, wobei die Dimensionen als Parameter angegeben werden.

5 Stimmen

@AndersonGreen Es ist gut, dass Sie einen Link für diejenigen erwähnt haben, die an einer Multi-D-Array-Lösung interessiert sind, aber die Frage und die Antwort von Ballsacian1 beziehen sich auf "2D"-Arrays, nicht auf "Multi-D"-Arrays

0 Stimmen

Sie sollten die ganze Sache durchgehen... z.B. alert(items[0][1]); // 2 usw.

511voto

Sufian Punkte 8277

Sie machen einfach jedes Element innerhalb des Arrays zu einem Array.

var x = new Array(10);

for (var i = 0; i < x.length; i++) {
  x[i] = new Array(3);
}

console.log(x);

6 Stimmen

Können sie Dinge wie Strings für ihre Schlüssel und Werte verwenden? myArray['Book']['item1'] ?

46 Stimmen

@Diego, ja, aber das ist nicht der Zweck von Arrays. Es ist besser, ein Objekt zu verwenden, wenn Ihre Schlüssel Zeichenketten sind.

10 Stimmen

Dieses Beispiel gefällt mir besser als die akzeptierte Antwort, weil es für dynamisch dimensionierte Arrays implementiert werden kann, z.B. new Array(size) wobei size ist eine Variable.

226voto

Matthew Crumley Punkte 98564

Ähnlich wie die Antwort von activa ist hier eine Funktion zur Erstellung eines n-dimensionalen Arrays:

function createArray(length) {
    var arr = new Array(length || 0),
        i = length;

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        while(i--) arr[length-1 - i] = createArray.apply(this, args);
    }

    return arr;
}

createArray();     // [] or new Array()

createArray(2);    // new Array(2)

createArray(3, 2); // [new Array(2),
                   //  new Array(2),
                   //  new Array(2)]

2 Stimmen

Kann damit ein 4-dimensionales Array erstellt werden?

4 Stimmen

@trusktr: Ja, Sie können so viele Dimensionen erstellen, wie Sie wollen (im Rahmen Ihrer Speicherbeschränkungen). Geben Sie einfach die Länge der vier Dimensionen ein. Zum Beispiel, var array = createArray(2, 3, 4, 5); .

0 Stimmen

Toll! Ich habe eigentlich hier danach gefragt: stackoverflow.com/questions/6053332/javascript-4d-arrays und eine Vielzahl von interessanten Antworten.

218voto

zurfyx Punkte 27060

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]);

3 Stimmen

Ich schlage Folgendes vor: Array.from({length:5}, () => [])

1 Stimmen

Das ist subjektiv, aber diese Antwort (die erste und zweite darin) scheint die beste Mischung aus kurz, schnell und modern zu sein.

0 Stimmen

@zurfyx irgendeine Idee, oder weiß jemand, warum webstorm sich darüber beschwert? Es scheint, dass array.from immer wieder Werte als undefiniert zurücklässt und ich dann nicht mit dem erstellten Array arbeiten kann, obwohl das Snippet hier auf Stackoverflow gut läuft

98voto

Philippe Leybaert Punkte 161931

Javascript hat nur 1-dimensionalen Arrays, aber Sie können Arrays von Arrays bauen, wie andere darauf hingewiesen.

Die folgende Funktion kann verwendet werden, um ein 2-D-Array mit festen Abmessungen zu erstellen:

function Create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

Die Anzahl der Spalten ist nicht wirklich wichtig, da es nicht erforderlich ist, die Größe eines Arrays vor dessen Verwendung anzugeben.

Dann können Sie einfach anrufen:

var arr = Create2DArray(100);

arr[50][2] = 5;
arr[70][5] = 7454;
// ...

0 Stimmen

Ich möchte ein 2-Dim-Array erstellen, das ein Kartenspiel darstellen würde. Das wäre ein 2-dim Array, das den Kartenwert und dann in dann die Farbe hält. Was wäre der einfachste Weg, das zu tun.

1 Stimmen

Function Create2DArray(rows) { var arr = []; for (var i=0;i<rows;i++) { arr[i] = []; } return arr; } function print(deck) { for(t=1;t<=4;t++) { for (i=1;i<=13;i++) { document.writeln(deck[t][i]); } } } fucntion fillDeck(d) { for(t=1;t<=4;t++) { myCardDeck[t][1] = t; for (i=1;i<=13;i++) { myCardDeck[t][i] = i; } } } function loadCardDeck() { var myCardDeck = Create2DArray(13); fillDeck(myCardDeck); print(myCardDeck); }

2 Stimmen

@Doug: Sie wollen eigentlich ein eindimensionales Array von Objekten mit 2 Attributen. var deck= []; deck[0]= { face:1, suit:'H'};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X