在javascript中检查多维数组中是否存在键

时间:2011-02-27 16:50:32

标签: javascript arrays multidimensional-array

希望这是一个简单的问题。

为什么检查多维数组中是否存在键:

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');
}

似乎一般不起作用,但是当我检查由a[0][x]“定义”的第一个索引(在这种情况下为“0”)时它起作用。例如,当我要求a[0][2](未定义)时,它会显示第一个警报。但是,当我要求a[1][0]时,我得到:

  

“未捕获的TypeError:无法读取未定义的属性'0'”

我该如何解决这个问题?

由于

6 个答案:

答案 0 :(得分:8)

首先检查第一个维度是否存在,然后检查第二个维度中的密钥是否存在

如果第一个测试返回false,则逻辑将返回false,如果第一个测试返回true,则逻辑将仅返回

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

答案 1 :(得分:2)

使用前三个分配,您的阵列实际上如下所示:

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

阅读a[0][2]只会返回undefined,因为a[0]存在,但其属性'0'未定义。

但是尝试阅读a[1][0]会引发 TypeError ,因为a[1]已经是undefined且不是对象,因此没有任何属性。这也是您的错误消息所说的内容:

  

无法读取未定义的属性“0”。

首先检查a[1],然后使用a[1][0]运算符检查typeof,即可解决此问题:

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

答案 2 :(得分:1)

a = Array(Array())

没有定义多维数组。它只是定义了一个带有一个项目的数组,恰好是另一个(空)数组。 javascript中没有内置的多维数组,因此您必须手动处理更多内容。

答案 3 :(得分:1)

您只需要进一步限定条件。由于数组的[1]索引未定义,因此无法测试其中的值。

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

答案 4 :(得分: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');
}

答案 5 :(得分:0)

在受支持的平台上,我们可以这样做:

if(a[3]?.[3]){
  // Do something
}