如何在JS中检查多维数组项是否设置?

6
如何在JS中检查多维数组中的项是否已设置?
w[1][2] = new Array;
w[1][2][1] = new Array;
w[1][2][1][1] = 10; w[1][2][1][2] = 20; w[1][2][1][4] = 30;

如何检查w[1][2][1][3]是否设置?

使用if (typeof w[1][2][1][3] !== 'undefined')的解决方案行不通。

我不想使用对象而代替数组。


“typeof”的方式有什么方面是不起作用的? - Patrick Evans
然后您需要在检查其他元素之前检查每个先前的数组元素是否存在。 - Patrick Evans
@karthikr,使用“typeof”返回相同的错误。 - Colargol
@Patrick Evans,谢谢,它有效:if (typeof w[w1][w2][w3] != 'undefined' && typeof w[w1][w2][w3][w4] != 'undefined') - Colargol
显示剩余3条评论
2个回答

6

在检查子元素之前,您没有检查前面的数组元素是否存在,因为如果父元素不存在,则子元素不能存在。

if( 
    typeof(w) != 'undefined' &&
    typeof(w[1]) != 'undefined' &&
    typeof(w[1][2]) != 'undefined' &&
    typeof(w[1][2][1]) != 'undefined' &&
    typeof(w[1][2][1][3]) != 'undefined' &&
  ) {
    //do your code here if it exists  
  } else {
    //One of the array elements does not exist
  }

如果if语句发现前面的元素不存在,那么它将运行else中的代码。如果前面的任何一个检查返回false,则停止检查其他元素。


6

以下是一种更通用的方法,您可以通过扩展Array的原型来实现:

Array.prototype.check = function() {
    var arr = this, i, max_i;
    for (i = 0, max_i = arguments.length; i < max_i; i++) {
        arr = arr[arguments[i]];
        if (arr === undefined) {
            return false;
        }
    }
    return true;    
}

w.check(1, 2, 1, 4); //will be true if w[1][2][1][4] exists

如果您不喜欢原型扩展,您可以使用单独的函数:

function check(arr) {
    var i, max_i;
    for (i = 1, max_i = arguments.length; i < max_i; i++) {
        arr = arr[arguments[i]];
        if (arr === undefined) {
            return false;
        }
    }
    return true;
}

check(w, 1, 2, 1, 4); //will be true if w[1][2][1][4] exists

我无法让你的检查函数工作。请看下面我的测试代码。在你的“check”下面,我添加了一个解决方法,对我起作用了。 - Tom McDonald

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