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

6voto

jwchang Punkte 10203

ES6+, ES2015+ können dies auf noch einfachere Weise tun


Erstellen eines 3 x 2 Arrays gefüllt mit true

[...Array(3)].map(item => Array(2).fill(true))

0 Stimmen

Ich muss gestehen. Ich habe Ihre Antwort "übernommen" und ergänzt meine , die Sammlung von Einzeilern.

6voto

zeah Punkte 244

Darunter erstellt man eine 5x5-Matrix und füllt sie mit null

var md = [];
for(var i=0; i<5; i++) {
    md.push(new Array(5).fill(null));
}

console.log(md);

3 Stimmen

Diese Antwort ist falsch. Es wird ein Array erstellt, dessen Slots mit demselben Array gefüllt sind. md[1][0] = 3 und alle anderen Elemente werden ebenfalls aktualisiert

5voto

Oli Punkte 15585

Es gibt noch eine andere Lösung, bei der Sie nicht gezwungen sind, die Größe des 2D-Arrays im Voraus festzulegen, und die sehr übersichtlich ist.

var table = {}
table[[1,2]] = 3 // Notice the double [[ and ]]
console.log(table[[1,2]]) // -> 3

Das funktioniert, weil, [1,2] wird in eine Zeichenkette umgewandelt, die als String-Schlüssel für die table Objekt.

0 Stimmen

Diese Antwort allein macht mich nicht wollen, um mit dem Schrott, der "mehrdimensionale" Arrays in JavaScript ist, obwohl ich eine sehr elegante Lösung haben.dies zeigt auch, dass alle anderen nicht wirklich machen mehrdimensionale Arrays überhaupt. Genau wie ein "Array" in JavaScript; diese Antwort wird vollständig "simulieren" eine pseudo-unendliche Größe, unendliche Dimension Array von beliebiger Größe und Inhalt.alle anderen Rekursion und Schleife basierte Antworten haben eine viel niedrigere Obergrenze für die Größe der Array-Struktur, die sie erstellen können.und die Erstellungsgeschwindigkeit wird ein großes Problem für diese größeren Strukturen sein.

0 Stimmen

Verwenden Sie stattdessen diese Zeile, um die Vorabbefüllung zu simulieren: var table = new Proxy({}, {get:(t,n)=>n in t ? t[n] : 42});

0 Stimmen

Netter, kreativer Weg, Array2D durch ein Objekt zu 'emulieren' :)

5voto

dimiguel Punkte 1353

Hier ist eine schnelle Methode, die ich gefunden habe, um ein zweidimensionales Array zu erstellen.

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(e => Array(y));
}

Sie können diese Funktion auch leicht in eine ES5-Funktion umwandeln.

function createArray(x, y) {
    return Array.apply(null, Array(x)).map(function(e) {
        return Array(y);
    });
}

Warum das funktioniert: Die new Array(n) Konstruktor erzeugt ein Objekt mit einem Prototyp von Array.prototype und weist dann dem Objekt die length was zu einem unbesetzten Feld führt. Aufgrund des Mangels an tatsächlichen Mitgliedern können wir die Array.prototype.map Funktion auf.

Wenn Sie jedoch mehr als ein Argument für den Konstruktor angeben, z. B. wenn Sie Array(1, 2, 3, 4) verwendet der Konstruktor die arguments Objekt zu instanziieren und eine Array Objekts korrekt.

Aus diesem Grund können wir Folgendes verwenden Array.apply(null, Array(x)) denn die apply Funktion werden die Argumente in den Konstruktor übertragen. Zur Verdeutlichung, tun Array.apply(null, Array(3)) ist gleichbedeutend mit Array(null, null, null) .

Da wir nun ein aktuelles Array erstellt haben, müssen wir nur noch die map und erstellen Sie die zweite Ebene ( y ).

5voto

CJ Mendes Punkte 304

Ich musste eine flexible Array-Funktion erstellen, mit der ich nach Bedarf "Datensätze" hinzufügen, sie aktualisieren und alle erforderlichen Berechnungen durchführen konnte, bevor ich sie zur weiteren Verarbeitung an eine Datenbank schickte. Hier ist der Code, ich hoffe er hilft :).

function Add2List(clmn1, clmn2, clmn3) {
    aColumns.push(clmn1,clmn2,clmn3); // Creates array with "record"
    aLine.splice(aPos, 0,aColumns);  // Inserts new "record" at position aPos in main array
    aColumns = [];    // Resets temporary array
    aPos++ // Increments position not to overlap previous "records"
}

Fühlen Sie sich frei zu optimieren und / oder weisen Sie auf Fehler hin :)

0 Stimmen

Wie wäre es einfach mit aLine.push([clmn1, clmn2, clmn3]); ?

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