2011-02-27 14 views
6

Esperemos que sea una pregunta fácil.Compruebe la existencia de la clave en una matriz multidimensional en javascript

¿Por qué es que la comprobación de la existencia de una llave en una matriz multidimensional:

a = new Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1][2] == undefined){ 
alert("sorry, that key doesn't exist"); 
} else {alert('good, your key exists'); 
} 

parece no estar funcionando en general, pero funciona cuando compruebo para un primer índice (en este caso, '0 ') que está' definido 'por a[0][x]. Por ejemplo, cuando solicito a[0][2] (que no está definido), muestra la primera alerta. Sin embargo, cuando pido a[1][0], me sale:

"Uncaught TypeError: Cannot read property '0' of undefined"

¿Cómo puedo solucionar este problema?

Gracias

Respuesta

8

Comprobar primero si la primera dimensión existe, entonces si existe la clave en la segunda dimensión

La lógica volverá false si la primera prueba devuelve false, y pone a prueba la segunda dimensión única si el primero es true .

if(a[1] == undefined && a[1][2] == undefined) 
+0

Muchas gracias :-). –

+0

si primero no está definido, ¿por qué verificar el siguiente? Si 'a [1]' no está definido, obviamente 'a [1] [2]' no estará definido. No ? – Hafiz

1
a = Array(Array()) 

no define una matriz multi-dimensional. Simplemente define una matriz con un elemento, que resulta ser otra matriz (vacía). No hay arrays multidimensionales incorporados en javascript, por lo que tendrá que manejar las cosas de forma más manual.

+0

Además, no debe haber algunas palabras clave 'nuevas' allí. Llamar a una función de constructor sin nueva es una cosa mala. – johusman

+0

Bueno, eso no responde mi pregunta, sin embargo, gracias por señalar 'new Array (Array());'. Fijo. –

1

Solo necesita calificar el condicional. Como el índice [1] de la matriz no está definido, no puede probar los valores en él.

if(a[1] === undefined || a[1][2] === undefined) 
+0

Gracias por su respuesta.Desafortunadamente, @Caspar publicó anteriormente (3 minutos antes), así que debo aceptar su respuesta. +1, sin embargo. –

2

Con las tres primeras asignaciones matriz realidad se parece a esto:

a = [['1','2']] 

lectura a[0][2] sólo devuelve undefined porque a[0] existe, pero su propiedad '0' no está definido.

Pero tratar de leer a[1][0] tiros un TypeError a[1] porque ya está undefined y no es un objeto y por lo tanto no tiene ninguna propiedad. Esto es también lo que su mensaje de error dice:

Cannot read property '0' of undefined.

puede resolver este problema mediante la primera comprobación de a[1] y luego la comprobación de a[1][0] utilizando el typeof operador:

if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined') 
+0

En mi código real, tengo más de a = [['1', '2']], sin embargo, entiendo el punto. Muchas gracias por su respuesta. –

0
var a = Array(Array()); 
a[0][0]='1'; 
a[0][1]='2'; 
if(a[1] === undefined || a[1][2] === undefined) { 
    alert("sorry, that key doesn't exist"); 
} else { 
    alert('good, your key exists'); 
} 
Cuestiones relacionadas