2016-11-17 67 views
1
var arr = [[],[]]; 
var si = 5; 
var c = 0; 
if (arr[si][c] == null) 
{ 
    arr[si][c] = { 
      code : "Test", 
    }; 
} 
alert(arr[si][c].code); 

你好,我想運行這個示例代碼,但我得到一個錯誤,說未定義的屬性「0」不能被調用。爲什麼我得到這個二維數組的錯誤?

尷尬的是,如果我使用數值而不是變量「si」和「c」作爲索引,則錯誤不會顯示!

是否有可能在JS中不能使用變量作爲索引?我認爲它適用於非二維數組。

謝謝你和問候

+4

不是2D陣列 - 其arrawys的陣列。 –

+0

[如何在JavaScript中創建二維數組?](http://stackoverflow.com/questions/966225/how-can-i-create-a-two-dimensional-array-in-javascript) – Liam

+0

另請參閱http://stackoverflow.com/questions/39325636/porting-c-sharp-3d-array-to-js-3d-array/39328793#39328793,有一種建議的迷你圖書館的一種多維JS陣列。它是3維的,但你肯定可以修改爲2。 –

回答

6

JavaScript沒有二維陣列中的任何概念。只是包含其他數組的數組。

arr[si][c]arr[5][0]

arr是具有兩個成員(01),其中的每一個是一個數組的數組。

當你訪問arr[5]時,你得到undefined,因爲你已經超越了最後。

undefined[0]是一個錯誤。

的尷尬的事情是,如果我用的不是變量「SI」和「c」爲指標的數值,錯誤顯示不出來!

如果使用文字而不是變量,則會出現相同的錯誤。推測你的工作測試涉及不同的號碼。

var arr = [[],[]]; 
 
if (arr[5][0] == null) 
 
{ 
 
    arr[5][0] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[5][0].code);

+0

嗨,謝謝你的解釋。但是,我如何創建一個二維數組呢?索引應該是我從數據庫中獲得的數字。所以它不會是0 - N,而更像是5,10,100,200,300,300,400,500。 – Wintersun

+0

@Wintersun - 你不能。我把你回到答案的第一句話。你必須在你想要的外部數組的索引處顯式地創建一個數組。 – Quentin

0

,你可以嘗試先檢查是否arr[si].length-1是大於或等於c。是這樣的:

if((arr[si].length-1)>c) 
0

您在定義arr訪問沒有定義的數組索引 arr[5]5,因爲有兩個元素[][],以便它有指數01所以如果你設置si10它會工作。

var arr = [[],[]]; 
 
var si = 1; 
 
var c = 0; 
 
if (arr[si][c] == null) 
 
{ 
 
    arr[si][c] = { 
 
      code : "Test", 
 
    }; 
 
} 
 
alert(arr[si][c].code);

相關問題