Javascript двумерные массивы [дубликат]
На этот вопрос уже есть ответ здесь:
Я объявил двумерный массив, например:
a = [[]]
Однако, когда я пытаюсь дать значение второго измерения, используя индекс первого измерения, отличный от 0, это не работает:
a[1][0] = "foo" //returns error
Есть ли лучший способ вокруг этого, чем вручную определять каждый индекс, который вам нужен как массив, т. е.:
a[1] = [];
a[2] = [];
a[3] = [];
//et cetera
6 ответов:
N-мерные массивы не существуют в javascript - вы должны просто сделать массивы, содержащие массивы в качестве элементов.
Вы получаете ошибку, потому что
a = [[]];
объявляет массив с одним элементом, который также является массивом. Поэтомуa[0]
является внутренним массивом, ноa[1]
не существует, потому что вы никогда его не объявляли. Самый простой способ правильно объявить "двумерный массив" - это использовать цикл:var outerArray = []; var numInternalArrays = 5; for (var i = 0; i < numInternalArrays; i++) { outerArray[i] = []; }
Если вы знаете, сколько элементов должен иметь корневой массив, вы можете сделать что-то вроде этого:
var arr = (Math.pow(2,10)-1).toString(2) // Binary string of 1s. Its length being 10 .split('') // Create an array from this string .map(function(){return [];}); // Map a new empty array to each index console.log(arr); // [[],[],[],[],[],[],[],[],[],[]]
Этим достигается то же самое:
for(var arr = [], i=10; i--; arr[i]=[]);
Нет необходимости объявлять
arr
вне цикла for, так как javascript не имеет области блока, он будет добавлен в область, в которой он выполняется.
a = [[]]
Это массив, причем первым элементом является массив. Именно поэтому индексация в первый элемент все еще работает (a[0][0]).
Если вы хотите получить доступ ко второму элементу в виде массива, вам нужно создать свой массив в виде
a = [[],[]]
Смотрите этот вопрос для примеров Как создать двумерный массив в JavaScript?
В javascript нет многомерных массивов.
То, что вы делаете, - это массив массивов, но самый внешний массив имеет только один элемент (т. е. элемент 0), значение которого является другим массивом. Таким образом, a[1] (или, более широко, a[1][x]) является недопустимым, поскольку внешний массив имеет только один элемент.
Таким образом, вы можете сделать[0][x] = "foo", но не наоборот.Таким образом, вы можете либо инициализировать массив с помощью цикла for, либо сделать что-то вроде var a =[[][][][][]];
Массив массивов можно запустить следующим образом:
var a = []; // start with the column array
Затем, когда вы хотите поместить что-то в местоположение
[i][j]
, мы можем назвать " i "индексом строки и" j " индексом столбца.Обратите внимание, что это работает только потому, что мы всегда помещаем что-то в новый массив строк сразу после его создания. Это может не сработать, если вы поставите 0 или "" вместо "foo".if (!a[i]) { // check for row existing a[i] = []; // .. and create it if not } a[i][j] = 'foo'; // put something in the array cell
В javascript есть много вещей, которые являются "ложными", включая "null" и "undefined" и "0", и я просто не знаю, если пустой массив или массив с одним элементом, который является пустой строкой, считаются ложными. Так что вам придется поэкспериментировать с тем, как именно обнаружить недостающий массив строк, чтобы вы могли его добавить.