2012-03-10 199 views
0

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

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

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

信息:
- 这给了我一个奇怪的错误“失踪:物业编号后”这似乎没有多大意义
- 不幸的是我没有找到示例显示如何使用谷歌
迄今为止做到这一点 - 如果我不添加字段[0] ...创建第二个数组它作品。
- 将XSIZE和YSIZE更改为新数组(8)等数字无效。

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

非常感谢!

+0

可能复制... http://stackoverflow.com/questions/966225/how-to-create-a-two-dimensional-array-in-javascript – danmux 2012-03-10 19:34:57

回答

2

错误“丢失:后物业编号”是,因为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)); 
} 
+0

嗨!我测试了这个,这似乎很好!我会用这种方法。非常感谢! – 2012-03-10 19:36:35

+0

只要我有足够的代表,就会给你+1。 – 2012-03-10 19:42:03

1

在对象文字符号中,属性名称必须完全是:属性名称。首先,field[0]不是属性名称。其次,这些属性直到定义对象之后才存在,所以直到那时你才能访问属性。

你应该做的要么设置在阵列中创建对象后:

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

或嵌套数组常量:

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

您不必担心设置阵列大小,因为它会在添加元素时增长。

+0

嗨@outis。当我尝试鲍罗廷的回应时,没有看到你的回应,但似乎与他的回应一致。我会尽快给你+1。谢谢! – 2012-03-10 19:40:13

+1

@outis:但是你需要设置多维数组的最后一个维度的大小。这是pim在这里的主要问题。你不能只写'var field = [[]]; field [7] [7] = 99',所以他所有的'XSIZE'二级数组必须被创建并推入到第一级数组中。 – Borodin 2012-03-10 19:44:57

+0

@Borodin:你的例子的问题不是数组的大小没有预先声明,而是这些条目没有预先声明。 'var field = [];字段[7] = [];字段[7] [7] = 99;'工作正常。在你的例子中绝不会像'Array(8)'这样的东西。 – outis 2012-03-10 19:57:13

0

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

你可以使用一个for循环,而不是:

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

注意,YSIZE是没有必要的,因为一个空数组的工作原理也很不错([])。

+0

感谢您的输入! – 2012-03-10 19:43:05

0

您可以将二维数组作为您的obj属性,而无需借助外部程序并将所有内容都保留在对象内部。首先创建你的空'field'数组。

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