2012-03-27 21 views
30

Tengo un objeto JSON generado por PHP. Es un objeto con un conjunto de fechas. Tiene timeStamp y luego una versión formateada de la fecha. ¿Cómo podría iterar a través de esto en jQuery?¿Cómo puedo iterar a través de este objeto JSON en jQuery?

{ 
    "dates":[ 
    { 
     "timeStamp": 1317596400, 
     "formattedDate": "Mon 03 October 2011" 
    }, 
    { 
     "timeStamp": 1317682800, 
     "formattedDate": "Tue 04 October 2011" 
    }, 
    { 
     "timeStamp": 1317855600, 
     "formattedDate": "Thu 06 October 2011" 
    } 
    ] 
} 

He intentado:

for (var i in data) { 
    alert(data.dates[i].timeStamp); 
}; 

for (var i in data) { 
    alert(data[i].dates.timeStamp); 
}; 

y

for (var i in data) { 
    alert(data.dates.timeStamp[i]); 
}; 
+1

Limpié el código para la posteridad, este es un buen ejemplo. –

Respuesta

61

Puesto que usted ha insertado en cuestión como un jquery uno, usted debe utilizar $.each porque es función de iterador de jQuery:

$.each(data.dates, function(index, element) { 
    alert(element.timeStamp); 
}); 

Si usted quiere meter a la sintaxis for in (que veo que has intentado), una solución podría ser:

for(var key in data.dates) { 
    alert(data.dates[key].timeStamp); 
} 

Pero ten cuidado que la sintaxis for in puede hacer más de lo que cree que hace: Repite las propiedades heredadas del prototipo también, por lo que podría ser útil para asegurarse de que usted repite sólo en las propiedades de la instancia de objeto:

for(var key in data.dates) { 
    // if it's not something from the prototype 
    if(data.dates.hasOwnProperty(key)) { 
     alert(data.dates[key].timeStamp); 
    } 
} 

actualización
Otra manera elegante es utilizar el método Object.keys que devuelve una matriz que contiene todas las claves en el objeto de destino para iterar sobre todas las propiedades del objeto:

for(var i=0, keys=Object.keys(data.dates), l=keys.length; i<l; i++) { 
    alert(data.dates[key].timeStamp); 
} 
+0

Hola, gracias, decidí quedarme con el para en sintaxis. Algo que estoy más familiarizado con el origen de PHP y Java –

0

jQuery.each() es probablemente la forma más fácil, mira esto: http://api.jquery.com/jQuery.each/

por ejemplo,

$.each(dates, function(index, date) { alert(date.timeStamp); }); 
+0

debe ser 'data.dates' para que funcione. –

3

Utiliza $.each().
Parece que este:

$.each(data, function(n, elem) { 
    // here you process your data to data loaded to lines    
}); 
+0

$ .each no funciona en situaciones donde no hay longitud y solo se pasará. – gcoleman0828

+0

el OP está intentando iterar a través de una matriz de fechas, las matrices tienen una longitud: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length –

+0

así que quizás los downvotes son un poco duras? –

1

simplemente puede iterar excelentes referencias uf la estructura JSON usando jQuery each:

$.each(data, function(index, element) { 
    alert(element.dates.timeStamp); 
}); 
Cuestiones relacionadas