Как я могу создать двумерный массив в JavaScript? - PullRequest
1030 голосов
/ 08 июня 2009

Я читал в Интернете, и некоторые места говорят, что это невозможно, некоторые говорят, что это возможно, а затем приводят пример, а другие опровергают пример и т.д.

  1. Как объявить двумерный массив в JavaScript? (при условии, что это возможно)

  2. Как я могу получить доступ к его членам? (myArray[0][1] или myArray[0,1]?)

Ответы [ 42 ]

18 голосов
/ 18 мая 2016

Вот чего я достиг:

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

Это пишется мне bineeshkumar

18 голосов
/ 27 декабря 2013

Самый простой способ:

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 голосов
/ 08 июня 2009

Двумерные массивы создаются так же, как и одномерные массивы. И вы получаете к ним доступ как array[0][1].

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

alert (arr[2][1]); //alerts "4"
13 голосов
/ 25 июня 2014

Чтобы создать двумерный массив в javaScript, мы можем сначала создать массив, а затем добавить массивы в качестве его элементов. Этот метод возвращает двумерный массив с заданным количеством строк и столбцов.

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

для создания массива используйте этот метод, как показано ниже.

var array = Create2DArray(10,20);
13 голосов
/ 01 июля 2012

Я не уверен, что кто-то ответил на это, но я обнаружил, что это работает для меня довольно хорошо -

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

Например:

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

Например, для двумерного массива.

11 голосов
/ 08 сентября 2018

Чтобы создать не разреженный массив "2D" (x, y) со всеми адресуемыми индексами и значениями, равными нулю:

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

бонус "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)))

Вариации и исправления были упомянуты в комментариях и в разных точках в ответ на этот вопрос, но не в качестве фактического ответа, поэтому я добавляю его здесь.

Следует отметить, что (подобно большинству других ответов) это имеет O (x * y) временную сложность, поэтому, вероятно, не подходит для очень больших массивов.

10 голосов
/ 11 августа 2016

Использование массивов

В JavaScript 1.7 и выше вы можете использовать понимания массива для создания двумерных массивов. Вы также можете фильтровать и / или манипулировать записями при заполнении массива и не использовать циклы.

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"]
         ]
*/

Вы можете создать любой массив n x m и заполнить его значением по умолчанию, вызвав

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],
         ]
*/

Дополнительные примеры и документацию можно найти здесь .

Обратите внимание, что это еще не стандартная функция .

8 голосов
/ 04 декабря 2016

Мой подход очень похож на ответ @Bineesh, но с более общим подходом.

Вы можете объявить двойной массив следующим образом:

var myDoubleArray = [[]];

И хранение и доступ к содержимому следующим образом:

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'],) 

Это напечатает ожидаемый результат

[ 9, 8 ] 9 123
8 голосов
/ 01 июля 2017

Для любителей одного лайнера Array.from ()

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

Еще один (из комментария dmitry_romanov) использовать Array (). Fill ()

// creates 8x8 array filed with "0"    
const arr2d = Array(8).fill(0).map(() => Array(8).fill("0"));
6 голосов
/ 15 апреля 2014

Я нашел ниже самый простой способ:

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

alert(array1[0][100]);
alert(array1.length);
alert(array1[0].length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...