2012-07-04 7 views
6

を定義されていないかどうかをチェックするよりも、(任意の次元で、未定義のエラーを回避し)多次元配列が定義されていないかどうかをチェックするのクリーナー/短い方法があります:やったようJavascriptを多次元配列を

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 
} 
+2

'IF(ARR && ARR [D1] && ARR [D1]、[D2]){..}' - 配列は決して偽ではないので、これは機能します。 –

+0

'arr = null'のときはあなたのコードは動作しません。 – Bergi

答えて

2

あなたは[D2]まっすぐARR [D1]のためにテストすることはできません。しかし、私が収集するものから、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 
} 
2

これは、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));