Javascript对象中的二维数组

Two Dimensional Array in Javascript Object

本文关键字:二维数组 对象 Javascript      更新时间:2023-09-26

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

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

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

信息:
-这给了我一个奇怪的错误"missing:after property id",这似乎没有多大意义
-不幸的是,到目前为止,我还没有找到展示如何使用谷歌做到这一点的例子
-如果我不添加字段[0]。。。对于创建第二个数组,它是有效的
-将XSIZE和YSIZE更改为类似新数组(8)的数字。。。不起作用。

如果有人能教我怎么做,或者解释为什么我根本不能做到这一点,需要使用其他方法,我将不胜感激。

非常感谢!

错误"missing:after property id"是因为JavaScript看到了field[0]field部分,并希望在该字段的值之前有一个冒号。相反,它得到了一个开放的括号,所以它抱怨。

不能对在运行时设置了维度的对象定义进行硬编码。您还必须在运行时构建对象。像这样也许

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

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

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

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

或嵌套数组文字:

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

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

您只能在以这种方式构造的对象上声明属性;而不是在另一个"级别"中的对象上。

您可以使用for循环:

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

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

您可以将二维数组作为您的obj属性,而无需求助于外部过程,并将所有内容保留在对象内部。首先创建空的"字段"数组。

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