2012-07-04 18 views
6

¿Hay un limpiador/camino más corto para comprobar si está definida una matriz multidimensional (que evita un error indefinido en cualquier dimensión) que:Javascript - Comprobación de si una matriz multidimensional no está definido

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

Como haciendo lo siguiente generará un error si no está definida, ya sea arr o arr[d1]:

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

'si (arr && arr [d1] && arr [d1] [d2]) {..}' - Las matrices nunca son falsas, así que esto funciona. –

+0

Tu código no funcionará cuando 'arr = null'. – Bergi

Respuesta

2

Es frustrante que no se puede probar la matriz [d1] [D2] hacia arriba. Pero por lo que veo, JavaScript no admite matrices multidimensionales.

Así que la única opción que tienes es lo que sugested con

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

o envuelto en una función si lo usa regularmente.

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

Esto lo devolverá en un solo cheque usando try/catch.

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

Demostración:http://jsfiddle.net/r5JtQ/

Ejemplo de uso:

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)); 
Cuestiones relacionadas