Для цикла, вызывающего только последний массив объекта в некоторых местах, а не в других - PullRequest
0 голосов
/ 28 октября 2019

Я вызываю массив объектов из файла 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);

Журнал консоли с именем «первый тест» успешно отображает каждый результат из json следующим образом:

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

Это именно то, что я ищу, но когда я для показа результатов в homepagetime, homepageplace и homepagewho divs показываю ниже код, ничего не появляется. А для журнала консоли «второй тест» я получаю только первый массив в объекте, а не остальные, например:

12:00 India Gandhi

Ясно, что он вызывает только первый массив в объекте, но я не могупонять, почему при рассмотрении цикла for указываются все массивы. Я все еще изучаю JavaScript.

Ответы [ 3 ]

3 голосов
/ 28 октября 2019

Ваш (отображаемый) код должен быть внутри цикла. Вы можете использовать конкатенацию строк или функцию append () для добавления данных в элементы 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>);
}
1 голос
/ 28 октября 2019

Вы должны добавить HTML в цикле, где вы присваиваете значения. Вне цикла вы получите последнее значение из-за закрытия.

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 голос
/ 28 октября 2019

Код, отображающий результаты, находится вне цикла, это означает, что он будет выполняться только один раз, а не для каждого элемента массива, как предполагалось. Переменные время, место и кто устанавливаются на каждой итерации цикла, и то, что у вас осталось в конце, является результатом последней итерации. Обратите внимание, что даже если вы переместите код отображения внутрь цикла, функция html заменяет содержимое, находящееся в данный момент в элементе, поэтому каждая итерация цикла заменит результат, и в результате вы получите то же содержимое, что и в настоящее время. Я предлагаю либо объединить результаты, либо динамически создать новый элемент для каждого.

...