0

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

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

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 更改为像 new Array(8)... 这样的数字不起作用。

如果有人能告诉我如何做或解释为什么我根本不能这样做并且需要使用其他方法,我将非常感激。

非常感谢!

4

4 回答 4

3

错误“missing : after property id”是因为 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));
}
于 2012-03-10T19:32:34.153 回答
1

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

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

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

或嵌套数组文字:

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

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

于 2012-03-10T19:33:09.593 回答
0

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

您可以改用for循环:

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

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

于 2012-03-10T19:33:13.733 回答
0

您可以将二维数组作为您的 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
于 2017-09-20T14:01:25.457 回答