繁体   English   中英

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

[英]Check for existence of key in multidimensional array in javascript

希望是一个简单的问题。

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

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] ,我得到:

“未捕获的类型错误:无法读取未定义的属性‘0’”

我怎么解决这个问题?

谢谢

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

逻辑将返回false如果第一个测试返回false ,并测试只有第一个是第二维true

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

通过前三个分配,您的数组实际上如下所示:

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

读取a[0][2]只会返回undefined因为a[0]存在但它的属性'0'没有定义。

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

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

您可以通过首先检查a[1]然后使用typeof运算符检查a[1][0]来解决此问题:

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

没有定义多维数组。 它只是定义了一个包含一项的数组,而该数组恰好是另一个(空)数组。 javascript 中没有内置的多维数组,因此您必须更加手动地处理事情。

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

if(a[1] === undefined || a[1][2] === undefined)
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');
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM