Estoy llamando a una matriz de objetos desde un archivo JSON:

if (results !=null && results.value !=null {
  for (var i = 0; i < result.value.length; i++) {
    time = results.value[i].starttime;
    place = results.value[i].location;
    who = results.value[i].attendee;
    console.log("first test", time, place, who);
  }
}
function(error) {
   alert ("Error here" + error.message);
}
$(#homepagetime).html(time);
$(#homepageplace).html(place);
$(#homepagewho).html(who);
console.log("second test", time, place, who);

El registro de la consola denominado "primera prueba" muestra con éxito todos los resultados del json de la siguiente manera:

12:00 India Gandhi
14:00 England Elizabeth
16:00 USA Obama

Esto es exactamente lo que estoy buscando, pero cuando busco el siguiente código para mostrar los resultados en homepagetime, homepageplace y homepagewho divs, no aparece nada. Y para el registro de la consola "segunda prueba" solo obtengo la primera matriz en el objeto y no el resto, por ejemplo:

12:00 India Gandhi

Claramente solo está llamando a la primera matriz en el objeto, pero no puedo entender por qué considerar el bucle for especifica todas las matrices. Todavía estoy aprendiendo JavaScript.

0
T.Doe 28 oct. 2019 a las 18:47

3 respuestas

La mejor respuesta

Su código (display) debe estar dentro del bucle o puede usar una concatenación de cadenas o la función append () para agregar datos a elementos div

for (var i = 0; i < results.value.length; i++) {
    time = results.value[i].starttime;
    place = results.value[i].location;
    who = results.value[i].attendee;
    console.log("first test", time, place, who);
    $(#homepagetime).append(time + '<br>');
    $(#homepageplace).append(place + '<br>');
    $(#homepagewho).append(who + '<br>);
}
3
Amós Assis 28 oct. 2019 a las 16:19

El código que muestra los resultados está fuera del ciclo, eso significa que solo se ejecutará una vez y no para cada elemento de la matriz como se esperaba. Las variables tiempo, lugar y quién se configura en cada iteración del bucle y lo que queda al final es el resultado de la última iteración. Tenga en cuenta que incluso si mueve el código de visualización dentro del bucle, la función html reemplaza el contenido actualmente en el elemento, por lo tanto, cada iteración del bucle reemplazaría el resultado y terminaría con el mismo contenido que tiene actualmente. Sugiero concatenar los resultados o crear dinámicamente un nuevo elemento para cada uno.

1
Checkium 28 oct. 2019 a las 15:58

Debe agregar html en el bucle donde asigna los valores. Fuera del bucle obtendrá el último valor debido al cierre.

for (var i = 0; i < result.value.length; i++) {
    time = results.value[i].starttime;
    place = results.value[i].location;
    who = results.value[i].attendee;
    console.log("first test", time, place, who);
    $(#homepagetime).html(time);
    $(#homepageplace).html(place);
    $(#homepagewho).html(who);
  }
1
Azam Munawar 28 oct. 2019 a las 16:15