2011-08-25 16 views
9

Duplicar posibles:
Length of Javascript Associative ArrayComprobar la longitud de matrices multidimensionales con Javascript

Quiero comprobar la longitud de una matriz multidimensional, pero me sale "indefinido" como el retorno. Supongo que estoy haciendo algo mal con mi código, pero no puedo ver nada extraño al respecto.

alert(patientsData.length); //undefined 
alert(patientsData["XXXXX"].length); //undefined 
alert(patientsData["XXXXX"]['firstName']); //a name 

fruits = ["Banana", "Orange", "Apple", "Mango"]; 
alert(fruits.length); //4 

¿Pensamientos? ¿Podría esto tener algo que ver con el alcance? La matriz se declara y configura fuera de la función. ¿Podría esto tener algo que ver con JSON? Creé la matriz a partir de una declaración eval(). ¿Por qué la matriz ficticia funciona bien?

+0

sería útil ver cómo es 'patientsData'. –

+1

Si realmente desea obtener las dimensiones de una matriz (en lugar de un objeto), consulte aquí: http://stackoverflow.com/a/13832026/975097 –

Respuesta

9

Esas no son matrices. Son objetos, o al menos están siendo tratados como objetos. Incluso si son instancias de Array, en otras palabras, la "longitud" solo rastrea la propiedad más grande indexada numérica.

JavaScript realmente no tiene un tipo de "matriz asociativa".

Se puede contar el número de propiedades en una instancia de objeto con algo como esto:

function numProps(obj) { 
    var c = 0; 
    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) ++c; 
    } 
    return c; 
} 

Las cosas se ponen un poco desordenado cuando se tiene cadenas de herencia, etc., y hay que trabajar en lo que desea que el semántica de que se basa en su propia arquitectura.

2

.length solo funciona en arreglos. No funciona en arrays/objetos asociativos.

patientsData["XXXXX"] no es una matriz. Es un objeto. Aquí hay un ejemplo simple de su problema:

var data = {firstName: 'a name'}; 
alert(data.length); //undefined 
0

Parece que no está utilizando una matriz anidada, pero está utilizando objetos anidados en objetos porque está accediendo a los miembros por sus nombres (en lugar de índices).

Cuestiones relacionadas