Двумерный массив в объекте Javascript - PullRequest
0 голосов
/ 10 марта 2012

Я хочу создать объект, который содержит один или несколько двумерных массивов в Javascript.

Я попробовал это следующим образом (в этом примере я пытаюсь добавить только один двумерный массив):

var XSIZE = 8;  
var YSIZE = 8;  
var obj = {  
 field : new Array(XSIZE),  
 field[0] : new Array(YSIZE),  
 foo : 1,  
 bar : 100  
}

Информация:
- Это дает мне странную ошибку «отсутствует: после идентификатора свойства», которая, кажется, не имеет большого смысла
- К сожалению, я не нашел примеров, показывающих, как сделать это с помощью Google
- Если я не добавлю поле [0] ... для создания второго массива это сработает.
- изменение XSIZE и YSIZE на числа, подобные новому массиву (8) ... не работает.

Я был бы очень признателен, если бы кто-нибудь показал мне, как это сделать, или объяснил, почему я вообще не могу этого сделать, и мне нужно использовать какой-то другой метод.

Большое спасибо!

Ответы [ 4 ]

2 голосов
/ 10 марта 2012

Ошибка "отсутствует: после идентификатора свойства" вызвана тем, что JavaScript видит field часть field[0] и ожидает двоеточие перед значением этого поля.Вместо этого он получает открытую скобку, поэтому он жалуется.

Вы не можете жестко закодировать определение объекта, размеры которого установлены во время выполнения.Вы должны построить объект также во время выполнения.Как это возможно

var XSIZE = 8;  
var YSIZE = 8;

var obj = {  
 field : new Array(),  
 foo : 1,  
 bar : 100  
}

for (var i = 0; i < XSIZE; i++) {
  obj.field.push(new Array(YSIZE));
}
1 голос
/ 10 марта 2012

В буквенной нотации объекта имена свойств должны быть именно такими: имена свойств. Во-первых, field[0] не является именем свойства. Во-вторых, свойства не существуют до определенного после объекта, поэтому вы не можете получить доступ к свойствам до тех пор.

Что вам нужно сделать, это установить массив после создания объекта:

var obj = {...}
obj.field[0] = [...];

или вложенные литералы массива:

var obj = {
    field: [ [...],
              ...
           ],
    ...
}

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

0 голосов
/ 20 сентября 2017

Вы можете получить двумерный массив в качестве свойства obj, не прибегая к внешним процедурам, и хранить все внутри объекта.Создайте пустой массив 'field' 1st.

var obj = {
field:[],

foo:1,
bar:100
};

Теперь создайте метод объекта для создания двумерного массива из вашего исходного безразмерного массива.Вы можете определить длину и количество измерений многомерного массива по своему усмотрению во время выполнения:

var obj = {
field:[],
multifield:function(x,y){for (var count=0;count<x;count++)  {this.field[count]=new Array(y);}}, 

foo:1,
bar:100
};

Затем вы можете вызвать метод obj.multifield для ввода любых измерений, которые вы решите:

obj.multifield(10,5); //-->create a 10x5 array in this case...

console.log(obj.field.length); // 10
 console.log(obj.field[0].length); // 5
0 голосов
/ 10 марта 2012

Вы можете объявить свойства только таким образом сконструированного объекта; не на объектах в другом "уровне".

Вместо этого вы можете использовать цикл for:

for(var i = 0; i < XSIZE; i++) {
  obj.field[i] = new Array(YSIZE);
}

Обратите внимание, что YSIZE не является необходимым, поскольку пустой массив также отлично работает ([]).

...