it-swarm.com.de

Wie erstelle ich ein leeres 2D-Array in Javascript?

Wie erstelle ich ein leeres 2D-Array in Javascript (ohne zu wissen, wie viele Zeilen oder Spalten das neue Array enthält)?

Wenn es sich um ein einfaches Array var newArray = new Array(); handelt, kann ich beliebig viele Elemente zuweisen. Aber was ist mit einem 2D-Array? Kann ich eine erstellen, ohne die Anzahl der Zeilen und Spalten anzugeben? und wie kann ich danach auf die Elemente zugreifen (myArray[0][1] oder myArray[0,1])?

15
meks

Ja, Sie können ein leeres Array erstellen und dann Daten hineinschieben. In JavaScript muss nicht zuerst die Länge definiert werden.
Check out jsFiddle Live Demo

Definieren:

var arr = [[],[]];

Push-Daten:

arr[0][2] = 'Hi Mr.A';
arr[1][3] = 'Hi Mr.B';

Daten lesen:

alert(arr[0][2]);
alert(arr[1][3]);
20

Sie können ein 6 x 6 leeres Array wie folgt erstellen:

var myGrid = [...Array(6)].map(e => Array(6));
  • Array(6) generiert ein Array mit Länge = 6 und voller undefined-Werten.
  • Wir ordnen dieses Array einem anderen Array mit undefined-Werten zu.
  • Am Ende erhalten wir ein 6x6-Raster mit undefined-Positionen.

Wenn Sie das Raster mit einem Standardwert initialisieren müssen:

var value = 'foo'; // by default
var myGrid = [...Array(6)].map(e => Array(6).fill(value));

Jetzt haben Sie ein 6 x 6-Raster mit 'foo'.

35
André

Es gibt keine zweidimensionalen Arrays in Javascript.

Um den Effekt eines zweidimensionalen Arrays zu erreichen, verwenden Sie ein Array von Arrays, das auch als gezacktes Array bezeichnet wird (da die inneren Arrays unterschiedliche Länge haben können).

Ein leeres gezacktes Array wird wie jedes andere leere Array erstellt:

var myArray = new Array();

Sie können auch ein leeres Array-Literal verwenden:

var myArray = [];

Um Objekte in das gezackte Array einzufügen, müssen Sie zunächst innere Arrays einfügen, zum Beispiel wie folgt:

myArray.Push([]);
myArray[0][0] = 'hello';

Sie können auch ein Array erstellen, das eine Reihe leerer Arrays enthält.

var myArray = [[],[],[]];

Dadurch erhalten Sie ein gezacktes Array ohne Elemente, das jedoch aus drei inneren Arrays besteht.

Da es sich um ein Array von Arrays handelt, greifen Sie mit myArray[0][1] auf die Elemente zu.

11
Guffa

Angenommen, Sie wollten ein 2D-Array (d. H. Eine Matrix) mit 100x100 erstellen, das können Sie in einer Zeile machen:

//2d matrix in one line var 2darray = new Array(100).fill(null).map(()=>new Array(100).fill(null));

Dadurch wird eine 100x100-Matrix mit NULL-Werten erstellt. Ersetzen Sie die 100x100 durch die gewünschten Dimensionen und die Nullen durch den von Ihnen bevorzugten Standardwert oder leer für undefined.

8
Noah Ellman
var myArray = [
    ["cats","dogs","monkeys","horses"],
    ["apples","oranges","pears","bananas"]
];
document.write(myArray[0][2]) //returns "monkeys"
2
Qvcool

Zwei Dinge:

1) Die Array-Länge-Eigenschaft meldet die Array-Länge falsch, wenn sie nach dem Var myArray = [[], []] aufgerufen wird. Aussage. Da die leeren Arrays definiert sind, werden sie technisch durch die length-Eigenschaft gezählt. Im Sinne der length-Eigenschaft sollte sie jedoch 0 zurückgeben, da keinem der Arrays nicht leere Elemente hinzugefügt wurden.

Sie müssen mindestens zwei verschachtelte (in) Schleifen verwenden, eine für das 1. Array und eine für das 2. Array, und die nicht undefinierten Elemente zählen.

2) Erweitern des Siamak A.Motlagh-Beispiels und Hinzufügen eines Arr ([2] [4]) = 'Hi Mr.C'; Zuweisung schlägt fehl mit dem Fehler "Nicht abgerufener TypeError: Kann Eigenschaft '4' von undefined nicht festlegen".

Siehe jsFiddle: http://jsfiddle.net/howardb1/zq8oL2ds/

Hier ist eine Kopie dieses Codes:

var arr = [[],[]];

alert( arr.length );  // wrong!

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );  // correct

arr[0][2] = 'Hi Mr.A';
alert(arr[0][2]);

arr[1][3] = 'Hi Mr.B';
alert(arr[1][3]);

arr[2][4] = 'Hi Mr.C';  // At this point I'm getting VM558:62 Uncaught TypeError: Cannot set property '4' of undefined
alert(arr[2][4]);

var c = 0;
for( var i in arr )
  for( var j in arr[ i ] )
    if( arr[ i ][ j ] != undefined )
      ++c;
alert( c );

Warum scheitert der dritte Auftrag? Wie steht es mit der Erstellungsanweisung [[], []], die besagt, dass das erste Array für 0 und 1 gültig war, aber nicht 2 oder dass 2 und 3 für das zweite Array in Ordnung waren, aber nicht für 4?

Am wichtigsten ist, wie würde ich ein Array in einem Array definieren, das Datumsobjekte im ersten und zweiten Array enthalten könnte. Ich verwende den jQuery-UI DatePicker, der ein Datumsfeld erwartet, wie bei Datumsobjekten, die ich erweitert habe, um ein zweites Datumsfeld zu verwenden, das Datumsobjekte enthält, die Zeiten enthalten, sodass ich mehrere Datumsangaben verfolgen kann mehrmals pro Tag.

Vielen Dank.

1
Howard Brown

Das funktioniert auch als Ausdruck:

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

Ich weiß nicht, wie es in Bezug auf die Leistung mit den übrigen Antworten übereinstimmt. Wenn Sie einen Hinweis haben, lassen Sie es mich in den Kommentaren wissen. 

Wenn Sie die Länge des Arrays nicht vorher kennen, denken Sie daran, dass Sie entweder Push([]) oder splice() verwenden können, wenn Sie ein neues Element anstelle eines vorhandenen durch Push/Entfernen/Ersetzen/ersetzen möchten.

0
alexandros84