安全的方法来检查数组元素是否存在?

26

我有一个二维数组。目前我使用这样的符号来访问该数组:

myArray[5][9](例如)。

最安全(safest way)的方法是什么,以检查某个数组元素是否存在?例如,假设我正在循环遍历数组并检索每个数组元素的属性,如下所示:

myArray[5][9].firstName

然后我来到myArray[9][11].firstName(例如),它不存在。显然,这将引发异常,因为该元素不存在。

我该如何处理这个问题?我不是在循环遍历整个数组(我随机访问它的内容,并在for循环中使用myArray.length将不能起作用)。

是否有JS函数/方法可用于检查数组元素是否存在?

谢谢。


1
if (myArray[9][11] !== undefined && 'firstname' in myArray[9][11]) - adeneo
4个回答

32
安全调用操作符?.看起来不错。警告:许多但并非所有JavaScript的实现(和版本)都支持它。

对于您的示例,它将如下所示:

myArray[5][9]?.firstName

编辑:感谢Asaf评论,这里有更安全的版本。

myArray?.[5]?.[9]?.firstName

1
这个是防弹的。谢谢。 - julianm

3

if (!('firstname' in myArray[i][j])) { ... }

2

只需要用if语句进行检查即可。

if(myArray[i][j].firstName){
}

1

您可以使用hasOwnProperty方法来检查数组项是否存在:

if (myArray.hasOwnProperty(x) && myArray[x].hasOwnProperty(y)) {
  var name = myArray[x][y].firstName;
}

这检查了两个维度。如果您知道第一个索引(在示例中为x)始终在范围内,则可以跳过第一个测试。

如果您还将一些其他值存储在数组中,则需要检查该项是否具有firstName属性:

if (myArray.hasOwnProperty(x) && myArray[x].hasOwnProperty(y) && myArray[x][y].hasOwnProperty('firstName')) {
  var name = myArray[x][y].firstName;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接