2011-06-08 16 views
10

Possible Duplicate:
Length of Javascript Associative Arrayclave Conde/Valores en JSON

Tengo un JSON que tiene este aspecto:

Object: 
    www.website1.com : "dogs" 
    www.website2.com : "cats" 
    >__proto__ : Object 

Esto imprime cuando hago esto:

console.log(obj); 

Estoy tratando de obtener la recuento de los elementos dentro de este JSON, obj.length devuelve "indefinido" y obj [0] .length devuelve

Uncaught TypeError: Cannot read property 'length' of undefined

Me esperaba una longitud para devolver "2" en este caso. ¿Cómo puedo encontrar el conteo?

Gracias!

+0

Ver http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

sí puedo eliminar, tal vez la otra pregunta debe ser retitulada, es un poco engañosa ya que js ni siquiera tiene matrices asociativas –

Respuesta

21

usted tiene que contar por sí mismo:

function count(obj) { 
    var count=0; 
    for(var prop in obj) { 
     if (obj.hasOwnProperty(prop)) { 
     ++count; 
     } 
    } 
    return count; 
} 

Aunque ahora que vi el primer comentario sobre la cuestión, no es una respuesta mucho más agradable en esa página. De una sola línea, probablemente tan rápido si no más rápido:

function count(obj) { return Object.keys(obj).length; } 

Tenga en cuenta, sin embargo, el apoyo a Object.keys() no parece cross-browser por el momento.

+1

¿Quería pasar 'Object.keys' la función de conteo? – Eric

+0

@Eric, no, claro que no. Aclamaciones. – davin

+0

Gracias, tal vez aún no es un navegador cruzado, pero funciona bien en el lado del servidor 'node.js';) – GabLeRoux

2

.length solo funciona en arreglos, no en objetos.

var count = 0; 
for(var key in json) 
    if(json.hasOwnProperty(key)) 
     count++; 
Cuestiones relacionadas