it-swarm.com.de

Wie kann ich ein zweidimensionales Array in JavaScript erstellen?

Ich habe online gelesen und einige Orte sagen, dass dies nicht möglich ist. Einige sagen, es sei und geben dann ein Beispiel und andere widerlegen das Beispiel usw. 

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

  2. Wie würde ich auf seine Mitglieder zugreifen? (myArray[0][1] oder myArray[0,1]?)

983
Diego

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

1132
Ballsacian1

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

389
Sufian

Ähnlich wie die Antwort von activa, hier eine Funktion zum Erstellen 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)]
171
Matthew Crumley

Javascript hat nur 1-dimensionale Arrays, aber Sie können Arrays aus Arrays erstellen, wie andere bereits erwähnt haben.

Die folgende Funktion kann zum Erstellen eines 2-D-Arrays mit festen Dimensionen verwendet werden:

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 die Größe eines Arrays nicht vor der Verwendung festgelegt werden muss.

Dann kannst du einfach anrufen:

var arr = Create2DArray(100);

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

Der einfachste Weg:

var myArray = [[]];
65
Fred

Einige sagen, dass dies nicht möglich ist, weil ein zweidimensionales Array eigentlich nur ein Array von Arrays ist. Die anderen Kommentare hier bieten perfekt gültige Methoden zum Erstellen von zweidimensionalen Arrays in JavaScript. Der reinste Standpunkt wäre jedoch, dass Sie ein eindimensionales Array von Objekten haben. Jedes dieser Objekte wäre ein eindimensionales Array, das aus zwei Elementen besteht.

Das ist also die Ursache für die widersprüchlichen Sichtweisen. 

42

Nur wenige Leute zeigen den Einsatz von Push:
.__ Um etwas Neues zu bringen, zeige ich Ihnen, wie Sie die Matrix mit einem Wert wie beispielsweise 0 oder einer leeren Zeichenfolge "" initialisieren.
Erinnert daran, dass bei einem 10-Elemente-Array in Javascript der letzte Index 9 ist!

function matrix( rows, cols, defaultValue){

  var arr = [];

  // Creates all lines:
  for(var i=0; i < rows; i++){

      // Creates an empty line
      arr.Push([]);

      // Adds cols to the empty line:
      arr[i].Push( new Array(cols));

      for(var j=0; j < cols; j++){
        // Initializes:
        arr[i][j] = defaultValue;
      }
  }

return arr;
}

anwendungsbeispiele: 

x = matrix( 2 , 3,''); // 2 lines, 3 cols filled with empty string
y = matrix( 10, 5, 0);// 10 lines, 5 cols filled with 0
27
Sergio Abreu

Zwei-Liner:

var a = []; 
while(a.Push([]) < 10);

Es wird ein Array a der Länge 10 generiert, das mit Arrays gefüllt ist.

24
domenukk

Die vernünftigste Antwort scheint zu sein

var nrows = ~~(Math.random() * 10);
var ncols = ~~(Math.random() * 10);
console.log(`rows:${nrows}`);
console.log(`cols:${ncols}`);
var matrix = new Array(nrows).fill(0).map(row => new Array(ncols).fill(0));
console.log(matrix);


Beachten Sie, dass wir nicht direkt mit den Zeilen füllen können, da fill den flachen Kopierkonstruktor verwendet. Daher würden sich alle Zeilen den gleichen - Speicher teilen Andere Antwort):

// DON'T do this: each row in arr, is shared
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo'; // also modifies arr[1][0]
console.info(arr);
21
Francesco Dondi

So erstellen Sie ein leeres zweidimensionales Array (einzeilig)

Array.from(Array(2), () => new Array(4))

2 und 4 sind erste bzw. zweite Abmessungen.

Wir verwenden Array.from , das einen Array-ähnlichen Parameter und ein optionales Mapping für jedes Element verwenden 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 ein JavaScript-Array mit 1 ... N zu erstellen


Alternativ (aber ineffizienter 12% mit n = 10,000)

Array(2).fill(null).map(() => Array(4))

Der Leistungsabfall geht mit der Tatsache einher, dass die ersten Dimensionswerte initialisiert werden müssen, um .map auszuführen. Denken Sie daran, dass Array die Positionen erst dann zuweist, wenn Sie sie durch .fill oder eine direkte Wertzuweisung bestellen.

var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);


Nachverfolgen

Warum funktioniert das nicht?

 Array(2).fill(Array(4));

Während das scheinbar gewünschte zweidimensionale Array ([ [ <4 empty items> ], [ <4 empty items> ] ]) zurückgegeben wird, wurden Arrays catch: first dimension per Verweis kopiert. Das heißt, ein arr[0][0] = 'foo' würde tatsächlich zwei statt einer Zeile ändern.

var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);

19
zurfyx

Der einfachste Weg:

var arr  = [];

var arr1 = ['00','01'];
var arr2 = ['10','11'];
var arr3 = ['20','21'];

arr.Push(arr1);
arr.Push(arr2);
arr.Push(arr3);

alert(arr[0][1]); // '01'
alert(arr[1][1]); // '11'
alert(arr[2][0]); // '20'
16
Chicharito

Das habe ich erreicht:

var appVar = [[]];
appVar[0][4] = "bineesh";
appVar[0][5] = "kumar";
console.log(appVar[0][4] + appVar[0][5]);
console.log(appVar);

Das hat mich Bineeshkumar buchstabiert 

16
Bineesh

Zweidimensionale Arrays werden auf dieselbe Weise erstellt wie eindimensionale Arrays. Und Sie greifen auf sie zu wie array[0][1].

var arr = [1, 2, [3, 4], 5];

alert (arr[2][1]); //alerts "4"
14
tj111

Ich bin mir nicht sicher, ob jemand dies beantwortet hat, aber ich fand, dass dies für mich ziemlich gut funktioniert hat. 

var array = [[,],[,]]

z.B: 

var a = [[1,2],[3,4]]

Zum Beispiel für ein 2-dimensionales Array. 

11
Uchenna

Um ein 2D-Array in JavaScript zu erstellen, können Sie zuerst ein Array erstellen und dann Arrays als Elemente hinzufügen. Diese Methode gibt ein 2D-Array mit der angegebenen Anzahl von Zeilen und Spalten zurück. 

function Create2DArray(rows,columns) {
   var x = new Array(rows);
   for (var i = 0; i < rows; i++) {
       x[i] = new Array(columns);
   }
   return x;
}

um ein Array zu erstellen, verwenden Sie diese Methode wie folgt.

var array = Create2DArray(10,20);
10
prime

Verwenden Sie Array-Erkenntnisse

In JavaScript 1.7 und höher können Sie Array Complections verwenden, um zweidimensionale Arrays zu erstellen. Sie können die Einträge auch filtern und/oder bearbeiten, während Sie das Array füllen. Sie 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 ein beliebiges n x m-Array erstellen und durch Aufrufen mit einem Standardwert füllen

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 hier .

Bitte beachten Sie, dass dies noch keine Standardfunktion ist.

8
Tim Hallyburton

Mein Ansatz ist der Antwort von @Bineesh sehr ähnlich, jedoch mit einem allgemeineren Ansatz.

Sie können das Double-Array wie folgt deklarieren:

var myDoubleArray = [[]];

Und das Speichern und Zugreifen auf die Inhalte auf folgende Weise:

var testArray1 = [9,8]
var testArray2 = [3,5,7,9,10]
var testArray3 = {"test":123}
var index = 0;

myDoubleArray[index++] = testArray1;
myDoubleArray[index++] = testArray2;
myDoubleArray[index++] = testArray3;

console.log(myDoubleArray[0],myDoubleArray[1][3], myDoubleArray[2]['test'],) 

Dadurch wird die erwartete Ausgabe gedruckt

[ 9, 8 ] 9 123
7
Alexander

Für einen Liner Liebhaber Array.from ()

// creates 8x8 array filed with "0"    
const arr2d = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => "0"));

Eine andere (aus einem Kommentar von dmitry_romanov) benutze Array (). Fill ()

// creates 8x8 array filed with "0"    
const arr2d = Array(8).fill(0).map(() => Array(8).fill("0"));
7
my-

So erstellen Sie ein nicht spärliches "2D" -Array (x, y), bei dem alle Indizes adressierbar sind und die Werte auf null gesetzt sind:

let 2Darray = new Array(x).fill(null).map(item =>(new Array(y).fill(null))) 

bonus "3D" Array (x, y, z)

let 3Darray = new Array(x).fill(null).map(item=>(new Array(y).fill(null)).map(item=>Array(z).fill(null)))

Variationen und Korrekturen dazu wurden in Kommentaren und an verschiedenen Stellen als Antwort auf diese Frage erwähnt, jedoch nicht als tatsächliche Antwort, deshalb füge ich sie hier hinzu.

Es sollte beachtet werden, dass dies (ähnlich wie die meisten anderen Antworten) eine O (x * y) -Komplexität aufweist, so dass es wahrscheinlich nicht für sehr große Arrays geeignet ist.

6
Justin Ohms

Ich habe unten den einfachsten Weg gefunden:

var array1 = [[]];   
array1[0][100] = 5; 

alert(array1[0][100]);
alert(array1.length);
alert(array1[0].length);
5
GMsoF

Hier ist eine schnelle Möglichkeit, 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 dies funktioniert: Der new Array(n)-Konstruktor erstellt ein Objekt mit einem Prototyp von Array.prototype und weist dann die length des Objekts zu, was zu einem nicht besetzten Array führt. Da es keine echten Mitglieder gibt, können wir die Funktion Array.prototype.map nicht ausführen.

Wenn Sie dem Konstruktor jedoch mehr als ein Argument zur Verfügung stellen, beispielsweise wenn Sie Array(1, 2, 3, 4) ausführen, verwendet der Konstruktor das arguments-Objekt, um ein Array-Objekt korrekt zu instantiieren und zu füllen.

Aus diesem Grund können wir Array.apply(null, Array(x)) verwenden, da die apply-Funktion die Argumente in den Konstruktor verteilt. Zur Verdeutlichung ist das Ausführen von Array.apply(null, Array(3)) gleichbedeutend mit dem Ausführen von Array(null, null, null).

Nun, da wir ein tatsächlich gefülltes Array erstellt haben, müssen wir nur noch map aufrufen und die zweite Ebene (y) erstellen.

4
dimiguel

Javascript unterstützt keine zweidimensionalen Arrays, stattdessen speichern wir ein Array in einem anderen Array und rufen die Daten von diesem Array ab, abhängig von der Position des Arrays, auf das Sie zugreifen möchten. Denken Sie daran, dass die Nummerierung der Arrays beiZERObeginnt.

Code-Beispiel:

/* Two dimensional array that's 5 x 5 

       C0 C1 C2 C3 C4 
    R0[1][1][1][1][1] 
    R1[1][1][1][1][1] 
    R2[1][1][1][1][1] 
    R3[1][1][1][1][1] 
    R4[1][1][1][1][1] 
*/

var row0 = [1,1,1,1,1],
    row1 = [1,1,1,1,1],
    row2 = [1,1,1,1,1],
    row3 = [1,1,1,1,1],
    row4 = [1,1,1,1,1];

var table = [row0,row1,row2,row3,row4];
console.log(table[0][0]); // Get the first item in the array
4
Rick

Erzeugt darunter 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);

4
zeah

Ich musste eine flexible Array-Funktion erstellen, um nach Bedarf "Datensätze" hinzuzufügen und in der Lage zu sein, sie zu aktualisieren und alle Berechnungen durchzuführen, die ich brauchte, bevor ich sie zur weiteren Verarbeitung an eine Datenbank schickte. Hier ist der Code, hoffe es 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 auf Fehler aufmerksam zu machen :)

4
CJ Mendes

Sie können ein Array von Zeilen zuordnen, wobei jede Zeile ein Array der gleichen Länge ist. Oder Sie können ein eindimensionales Array mit Zeilen- * Spaltenelementen zuweisen und Methoden definieren, um Zeilen-/Spaltenkoordinaten Elementindizes zuzuordnen.

Für welche Implementierung Sie sich auch entscheiden, wenn Sie sie in ein Objekt einschließen, können Sie die Zugriffsmethoden in einem Prototyp definieren, um die Verwendung der API zu vereinfachen. 

2
Nat

var playList = [
  ['I Did It My Way', 'Frank Sinatra'],
  ['Respect', 'Aretha Franklin'],
  ['Imagine', 'John Lennon'],
  ['Born to Run', 'Bruce Springsteen'],
  ['Louie Louie', 'The Kingsmen'],
  ['Maybellene', 'Chuck Berry']
];

function print(message) {
  document.write(message);
}

function printSongs( songs ) {
  var listHTML = '<ol>';
  for ( var i = 0; i < songs.length; i += 1) {
    listHTML += '<li>' + songs[i][0] + ' by ' + songs[i][1] + '</li>';
  }
  listHTML += '</ol>';
  print(listHTML);
}

printSongs(playList);

2
antelove

Ich habe festgestellt, dass dieser Code für mich funktioniert:

var map = [
    []
];

mapWidth = 50;
mapHeight = 50;
fillEmptyMap(map, mapWidth, mapHeight);

...

function fillEmptyMap(array, width, height) {
    for (var x = 0; x < width; x++) {
        array[x] = [];
        for (var y = 0; y < height; y++) {

            array[x][y] = [0];
        }
    }
}
2
Fabced

Ein vereinfachtes Beispiel:

var blocks = [];

blocks[0] = [];

blocks[0][0] = 7;
2
rickatech

Ein Liner zum Erstellen eines mit m * n 2 dimensionierten Arrays.

new Array(m).fill(new Array(n).fill(0));
2
geniuscarrier

Sie können auch eine Funktion erstellen, um ein 2D-Array wie folgt zu erstellen:

var myTable = [];

function createArray(myLength) {
    myTable = new Array(myLength);
    var cols, rows;
    for (cols = 0; cols < myLength; cols++) {
        myTable[cols] = new Array(myLength);
    }
}

Sie können es aufrufen, indem Sie Folgendes verwenden, wodurch Sie ein 10x10 2D-Array erhalten.

createArray(10);

Sie können mit dieser Methode auch ein 3D-Array erstellen.

1
Avishai Roi

Rekursive Funktion zum Erstellen eines mehrdimensionalen Arrays:

var makeArray = function (dims, arr) {          
    if (dims[1] === undefined) {
        return new Array(dims[0]);
    }

    arr = new Array(dims[0]);

    for (var i=0; i<dims[0]; i++) {
        arr[i] = new Array(dims[1]);
        arr[i] = makeArray(dims.slice(1), arr[i]);
    }

    return arr;
}

Erstellen Sie ein 2x3x4x2 4D-Array:

var array = makeArray([2, 3, 4, 2]);    
1
chessweb

Ich habe eine Modifikation der Antwort von Matthew Crumley gemacht, um eine mehrdimensionale Array-Funktion zu erstellen. Ich habe die Dimensionen des Arrays hinzugefügt, die als Array-Variable übergeben werden sollen, und es wird eine weitere Variable - value - geben, mit der die Werte der Elemente der letzten Arrays im mehrdimensionalen Array festgelegt werden.

/*
*   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]]
1
Hristo Enev

Es gibt eine andere Lösung, die Sie nicht zwingt, die Größe des 2D-Arrays vorzugeben, und das ist sehr knapp.

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

Dies funktioniert, weil [1,2] in einen String umgewandelt wird, der als string key für das table-Objekt verwendet wird.

1
Oli

nodejs + lodash version: 

var _ = require("lodash");
var result = _.chunk(['a', 'b', 'c', 'd', 'e', 'f'], 2);
console.log(result);
console.log(result[2][0]);

Die Ausgabe:

[ [ 'a', 'b' ], [ 'c', 'd' ], [ 'e', 'f' ] ]
e
0
mpiliszcz
Array.from({length: rows}).map(e => new Array(columns));
0
Error404
var _field = (function()
{
    var array = [];
    for(var y = 0; y != 3; y++) { array[y] = new Array(5); }
    return array;
})();

// var item = _field[2][4];
0
Martin Wantke

Dies wird in einigen Kommentaren erwähnt, aber die Verwendung von Array.fill () hilft beim Erstellen eines 2-D-Arrays:

function create2dArr(x,y) {
    var arr = [];
    for(var i = 0; i < y; i++) {
        arr.Push(Array(x).fill(0));
    }
    return arr; 
}

dies führt zu einem Array der Länge x, y mal im zurückgegebenen Array.

0
efong5

Wenn Sie nur eine 4x4-Matrix haben, schauen Sie sich die DOMMatrix an, es ist einfach zu benutzen, ich kann sagen,

let m = new DOMMatrix(); 
// m.m11, m.m12, m.m13, m.m14, ..., m.m41, m.m42, m.m43, m.m44

Ursprünglich aus verschiedenen Gründen zur Verfügung gestellt, ist es nicht auf node.js verfügbar und nur auf 4x4 beschränkt.

Sie können auch erwägen, ein Auto-Vivification-Objekt anstelle von Arrays für JS zu verwenden. Schauen Sie sich meine Antwort hier an aber bringen Sie hier auch mehr zum überzeugen:

var tree = () => new Proxy({}, { get: (target, name) => name in target ? target[name] : target[name] = tree() });

var t = tree();
t[0][2][3] = 4;
console.log(t[0][2][3]);

Es verwendet neue JS und verhält sich nicht korrekt, wenn Sie es durchlaufen. Seien Sie also vorsichtig.

Werfen Sie einen Blick auf this , wenn Sie einen flexiblen Multi-Dimension-Array-Generator benötigen.

0
Ebrahim Byagowi

Ein tolles Repository hier

  • api: masfufa.js

  • beispiel: masfufa.html 

Zwei Beispiele werden ausreichen, um diese Bibliothek zu verstehen: 

Beispiel 1:

   /*     | 1 , 2 , 3 |
    * MX= | 4 , 5 , 6 |     Dimensions= 3 x 3
    *     | 7 , 8 , 9 |
    */ 


  jsdk.getAPI('my');
  var A=[1, 2, 3, 4, 5, 6, 7, 8, 9];
  var MX=myAPI.getInstance('masfufa',{data:A,dim:'3x3'});

dann : 

MX.get[0][0]  // -> 1 (first)
MX.get[2][2] //  ->9 (last)

Beispiel 2

   /*      | 1 , 9 , 3 , 4 |
    * MXB= | 4 , 5 , 6 , 2 |     Dimensions= 2 x 4
    *   
    */ 

  var B=[1 , 9 , 3 , 4 , 4 , 5 , 6 , 2];
  var MXB=myAPI.getInstance('masfufa',{data:B,dim:'2x4'});

dann : 

MXB.get[0][0]  // -> 1 (first)
MXB.get[1][3] //  -> 2 (last)
MXB.get[1][2] //  -> 6 (before last)
0
Abdennour TOUMI

Was passiert, wenn die Größe des Arrays unbekannt ist? Oder Array sollte dynamisch erstellt und gefüllt werden? Eine alternative Lösung, die sich für mich bewährt hat, ist die Verwendung einer Klasse mit einer statischen 2d-Arrayvariablen, die bei Nichtvorhandensein eines Index im Array diese initiiert:

function _a(x,y,val){
    // return depending on parameters
    switch(arguments.length){
        case 0: return _a.a;
        case 1: return _a.a[x];
        case 2: return _a.a[x][y];
    }

    // declare array if wasn't declared yet
    if(typeof _a.a[x] == 'undefined')
        _a.a[x] = [];

    _a.a[x][y] = val;
}
// declare static empty variable
_a.a = [];

Die Syntax lautet:

_a(1,1,2); // populates [1][1] with value 2
_a(1,1);   // 2 or alternative syntax _a.a[1][1]
_a(1);     // [undefined × 1, 2]
_a.a;      // [undefined × 1, Array[2]]
_a.a.length
0
NGix
 var items = [
      ["January 01", 42.5],
      ["February 01",  44.3],
      ["March 01",  28.7],
      ["April 01",  44.3],
      ["May 01",  22.9],
      ["June 01",  54.4],
      ["July 01",  69.3],
      ["August 01",  19.1],
      ["September 01",  82.5],
      ["October 01",  53.2],
      ["November 01",  75.9],
      ["December 01",  58.7]

    ];
  alert(items[1][0]); // February 01
  alert(items[5][1]); // 54.4
0
Juboraj Sarker

Wenn Sie nach einem 2D-Array für Google-Diagramme suchen, können Sie dies am besten tun 

var finalData = [];
[["key",value], ["2013-8-5", 13.5], ["2013-7-29",19.7]...]

verweis auf Kein gültiges 2D-Array-Google-Diagramm

0
Bishoy Hanna

Dies ist meine Implementierung von Multi-Dimension Array.

Bei diesem Ansatz erstelle ich ein Array mit einer einzigen Dimension

Ich habe eine Prototypfunktion multi zum Array-Objekt hinzugefügt, mit der ein beliebiges Dimensions-Array erstellt werden kann.

Ich habe auch eine Prototypfunktion index zum Array-Objekt hinzugefügt, die verwendet werden kann, um den Index eines linearen Arrays aus mehrdimensionalen Indizes abzurufen.

Erstellen eines Arrays

//Equivalent to arr[I][J][K]..[] in C
var arr = new Array().multi(I,J,K,..);

Zugriff auf Array-Werte an einem beliebigen Index

//Equivalent in C arr[i][j][k];
var vaue = arr[arr.index(i,j,k)];

SNIPPET

/*
   Storing array as single dimension 
   and access using Array.index(i,j,k,...)
*/


Array.prototype.multi = function(){
 this.multi_size = arguments;
 this.multi_len = 1
 for(key in arguments) this.multi_len *=  arguments[key];
 for(var i=0;i<this.multi_len;i++) this.Push(0);
 return this;
}

Array.prototype.index = function(){
   var _size = this.multi_len;
   var temp = 1;
   var index = 0;
   for(key in arguments) {
      temp*=this.multi_size[key];
      index+=(arguments[key]*(_size/temp))
   }
   return index;
}

// Now you can use the multi dimension array
// A 3x3 2D Matrix

var arr2d = new Array().multi(3,3); // A 2D Array
arr2d[arr2d.index(1,1,1)]  = 5;
console.log(arr2d[arr2d.index(1,1,1)]);

// A 3x3x3 3D Matrix

var arr3d = new Array().multi(3,3,3); // a 3D Array
arr3d[arr3d.index(1,1,1)]  = 5;
console.log(arr3d[arr3d.index(1,1,1)]);

// A 4x3x3 4D Matrix
var arr4d = new Array().multi(4,3,3,3); // a 4D Array
arr4d[arr4d.index(4,0,0,1)]  = 5;
console.log(arr4d[arr4d.index(4,0,0,1)]);

0
Nadir Laskar