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

时间:2015-02-01 14:28:36

标签: javascript arrays multidimensional-array null elements

我有一个2D数组。 我目前使用符号来访问该数组,例如:

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

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

myArray[5][9].firstName

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

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

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

感谢。

4 个答案:

答案 0 :(得分:2)

只需使用if条件进行检查。

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

答案 1 :(得分:1)

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

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

答案 3 :(得分:1)

Safe call operator ?.看起来不错。 警告:很多(但不是全部)JavaScript实现都支持它。

以您的示例为例,

myArray[5][9]?.firstName

编辑:感谢Asaf comment提供了更安全的版本

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