2011-02-27 52 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'); 
}