2011-02-27 51 views
6

希望這是一個簡單的問題。檢查javascript中多維數組中key的存在

這是爲什麼多維數組檢查一個鍵值存在:

a = new Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1][2] == undefined){ 
alert("sorry, that key doesn't exist"); 
} else {alert('good, your key exists'); 
} 

似乎不是一般的是工作,但它工作時我檢查的第一索引(在這種情況下,「0 '),這是由a[0][x]「定義」的。例如,當我詢問a[0][2](未定義)時,它顯示第一個警報。然而,當我問a[1][0],我得到:

"Uncaught TypeError: Cannot read property '0' of undefined"

我怎樣才能解決這個問題?

由於

回答

8

首先檢查如果如果在第二維度的鍵存在於第一維度然後存在

邏輯將返回false如果第一測試返回false,並測試所述第二維度如果第一個是true

if(a[1] == undefined && a[1][2] == undefined) 
+0

非常感謝:-)。 – 2011-02-27 17:06:50

+0

如果第一個未定義,那麼爲什麼要檢查下一個?如果'a [1]'未定義,那麼顯然'a [1] [2]'將是未定義的。不是? – Hafiz 2014-03-12 11:29:04

1
a = Array(Array()) 

沒有定義多維數組。它只是用一個項目定義一個數組,恰好是另一個(空)數組。在JavaScript中沒有內置的多維數組,所以你將不得不手動處理更多的東西。

+0

此外,還應有:

Cannot read property '0' of undefined.

您可以先檢查a[1],然後使用typeof運營商檢查a[1][0]解決這個問題那裏有一些「新」關鍵字。在沒有新的情況下調用構造函數是一件壞事。 – johusman 2011-02-27 16:58:39

+0

那麼,這並不回答我的問題,但是,感謝指出'新陣列(陣列());'。固定。 – 2011-02-27 17:04:39

1

您只需要進一步限定條件。由於數組的[1]索引未定義,因此無法測試數組中的值。

if(a[1] === undefined || a[1][2] === undefined) 
+0

感謝您的回答。不幸的是,@Caspar早些時候發佈了(3分鐘前),所以我必須接受他的回答。 +1,但。 – 2011-02-27 17:07:44

2

隨着前三分配你的數組實際上是這樣的:

a = [['1','2']] 

閱讀a[0][2]因爲a[0]存在,但沒有定義它的屬性'0'剛剛返回undefined

但想讀a[1][0]拋出一個類型錯誤因爲a[1]已經undefined而不是一個對象,因而不具有任何屬性。這也是你的錯誤消息,說什麼:

if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined') 
+0

在我的真實代碼中,我有不止一個= [['1','2']],但是,我明白了。非常感謝您的回答。 – 2011-02-27 17:00:46

0
var a = Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1] === undefined || a[1][2] === undefined) { 
    alert("sorry, that key doesn't exist"); 
} else { 
    alert('good, your key exists'); 
}