2012-03-10 208 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