我想用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