6

多次元配列が未定義であるかどうかを確認する (任意の次元での未定義エラーを回避する) クリーンで短い方法はありますか?

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

arrまたはarr[d1]が定義されていない場合、次のように実行するとエラーがスローされます。

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

2 に答える 2

3

これにより、try/catchを使用した1回のチェックで返されます。

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 に答える