Javascript对象中的二维数组

时间:2012-03-10 19:25:22

标签: javascript arrays 2d dimensional

我想在Javascript中创建一个包含一个或多个二维数组的Object。

我尝试了以下方式(在本例中我只尝试添加一个二维数组):

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

的信息:
- 这给了我一个奇怪的错误“遗失:属性id之后”似乎没有多大意义 - 不幸的是,到目前为止,我没有找到使用谷歌的例子 - 如果我不添加字段[0] ...用于创建第二个数组,它可以工作 - 将XSIZE和YSIZE更改为新数组(8)等数字...不起作用。

如果有人能告诉我该怎么做或解释为什么我根本不能这样做并且需要使用其他方法,我真的很感激。

非常感谢!

4 个答案:

答案 0 :(得分:2)

错误“缺失:在属性ID之后”是因为JavaScript看到field的{​​{1}}部分并且期望在该字段的值之前冒号。相反,它得到一个开放的括号,所以它抱怨。

您无法硬编码在运行时设置其尺寸的对象定义。您还必须在运行时构建对象。像这样或许

field[0]

答案 1 :(得分:1)

在对象文字表示法中,属性名称必须与:属性名称完全相同。首先,field[0]不是属性名称。其次,在定义对象之后,属性才会存在,因此在此之前您无法访问属性。

您应该做的是在创建对象后设置数组:

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

或嵌套数组文字:

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

创建数组时无需担心设置数组大小,因为在添加元素时它会增长。

答案 2 :(得分:0)

您只能在正在构造的对象上声明属性;不在另一个“级别”的对象上。

您可以改为使用for循环:

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

请注意,YSIZE不是必需的,因为空数组也可以正常工作([])。

答案 3 :(得分:0)

您可以将二维数组作为obj属性,而无需借助外部过程并将所有内容保留在对象内部。创建空白字段&#39;阵列第1。

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