6

是否有比以下方法更简洁/更短的方法来检查多维数组是否未定义(避免在任何维度出现未定义错误):

if(arr != undefined && arr[d1] != undefined && arr[d1][d2] != undefined){
    // arr[d1][d2] isn't undefined
}

如果arrarr[d1]未定义,则执行以下操作将引发错误:

if(arr[d1][d2] != undefined){
    // arr[d1][d2] isn't undefined
}
4

2 回答 2

3

这将使用 try/catch 在一次检查中返回它。

function isUndefined(_arr, _index1, _index2) {
    try { return _arr[_index1][_index2] == undefined; } catch(e) { return true; }
}

演示:http: //jsfiddle.net/r5JtQ/

使用示例:

var arr1 = [
    ['A', 'B', 'C'],
    ['D', 'E', 'F']
];

// should return FALSE
console.log(isUndefined(arr1, 1, 2));

// should return TRUE
console.log(isUndefined(arr1, 0, 5));

// should return TRUE
console.log(isUndefined(arr1, 3, 2));
于 2012-07-18T12:34:39.483 回答
2

令人沮丧的是,您无法直接测试 arr[d1][d2] 。但据我所知,javascript 不支持多维数组。

所以你唯一的选择就是你所建议的

if(arr != undefined && arr[d1] != undefined && arr[d1][d2] != undefined){
    // arr[d1][d2] isn't undefined
}

如果您经常使用它,或者包装在一个函数中。

function isMultiArray(_var, _array) {

    var arraystring = _var;

    if( _array != undefined )
        for(var i=0; i<_array.length; i++)
        {
            arraystring = arraystring + "[" + _array[i] + "]";
            if( eval(arraystring) == undefined ) return false;
        }

    return true;
}

if( ! isMultiArray(arr, d) ){
    // arr[d1][d2] isn't undefined
}
于 2012-07-18T12:22:05.223 回答