2012-02-24 47 views
5

Duplicar posibles:
Loop through Json objectLoop A través de objetos en Javascript

{"data":[{"name":"Jen","id":"1"},{"name":"Steve","id":"8"}]} 

Un servidor que estoy interactuando con responde con lo anterior.

Estoy tratando de recorrerlo para la declaración For..in.

Esto es lo que estoy tratando de hacer:

for (var item in response.data) 
{ 
console.log(item.name); 
} 

Esto no funciona. ¿Qué salió mal?

Gracias

que tengo que trabajar con el siguiente después de leer el comentario:

para (elemento var en response.data) { console.log (response.data [Artículo] .name); }} )

yo era capaz de obtener una lista de nombres ...

Puede alguien diseccionar la respuesta de por qué funcionó?

+0

¿Seguro que es JavaScript y no JSON? –

+0

No es un duplicado apropiado. Esta es una estructura de objeto diferente del vinculado. –

+1

¡No duplicado de esa pregunta! Él está bucle en la matriz! – hugomg

Respuesta

0

Salida: Why is using "for...in" with array iteration a bad idea?

Para ... en itera a través nombres de las propiedades de un objeto Los elementos de matriz también se consideran "propiedades", por lo que ... iteran a través de índices (que son 0, 1 en su caso). Como se esperaba cuando usas response.data [0] obtienes el primer elemento de tu matriz.

+0

¡Gracias! ¡Has respondido mi pregunta! –

10

data es en realidad una matriz (denotado por []), en lugar de un objeto por lo que desea un bucle normal for en lugar de un for in.

for (var i = 0; i<response.data.length; i++) { 
    // use i as an array index 
    console.log(response.data[i].name); 
} 

En JavaScript, el constructo for in se utiliza para iterar sobre las propiedades del objeto, pero para iterar una matriz una incremental para bucle se utiliza típicamente.

+0

Pude obtener el formato anterior para que funcione. Solo tenía curiosidad por cómo hacerlo con For..in But Thank you! Eso me confirma –

0

for..in itera sobre las propiedades enumerables de un objeto sin un orden en particular (puede obtener un orden diferente en diferentes navegadores). Una matriz es simplemente un objeto simple con un método de longitud especial y métodos prácticos heredados de Array.prototype (algunos de los cuales dependen de la propiedad de longitud especial). No hay restricciones sobre qué se puede usar para un nombre de propiedad, no están restringidos a enteros no negativos (señalando que cuando un nombre propiamente dicho no es un identificador válido, se debe usar la notación de corchetes para acceder a su valor).

Los índices de una matriz son solo nombres de propiedad de cadena (es decir, son simplemente nombres de propiedad de objeto) que son enteros no negativos, por lo que un ciclo for..in iterará sobre los índices numéricos (una vez más, no necesariamente en forma ascendente o descendente pedido) , así como todas las demás propiedades enumerables, incluidas las de la cadena[[Prototype]]. Por lo tanto, siempre se recomienda incluir una prueba hasOwnProperty con for..in a menos que desee incluir propiedades enumerables heredadas.

Debido a lo anterior, generalmente es mucho mejor iterar sobre las propiedades de la matriz usando un contador de 0 a array.length - 1 (ya que la longitud es siempre una más grande que el último índice).

Para probar el "ningún orden en particular" declaración, intente lo siguiente en IE y otros navegadores y tenga en cuenta la diferente orden:

var a = []; 
a[2] = 2; 
a[0] = 0; 
a[3] = 3; 
var b = []; 
for (var i in a) b.push(a[i]); 
alert(b);