Пожалуйста, кто-нибудь может мне помочь с моим циклическим массивом? Для некоторого безумия я не могу заставить его зацикливаться, я знаю, что это должно быть просто любые идеи, которые я пропустил.

Большое спасибо

var i;
for (i = 0; i < 5; i++) {
  $('#display').html('<p> Price: ' + data.results[i].value_inc_vat + '</p>');
  $('#display').append('<p> Time : ' + data.results[i].valid_from + '</p>');
  $('#display').append([i]);
}
1
Simon Webb 23 Окт 2019 в 11:57

2 ответа

Лучший ответ

Ваш код зациклен правильно. Проблема в том, что вы используете html(), который полностью перезаписывает весь существующий контент в элементе. Поэтому при каждой последующей итерации вы удаляете ранее добавленный контент. Чтобы это исправить, измените html() на append():

let data = {
  results: [{
    value_inc_vat: 'value_inc_vat1',
    valid_from: 'valid_from1'
  },{
    value_inc_vat: 'value_inc_vat2',
    valid_from: 'valid_from2'
  }]
}

var i;
for (i = 0; i < 2; i++) {
  $('#display').append('<p> Price: ' + data.results[i].value_inc_vat + '</p>');
  $('#display').append('<p> Time : ' + data.results[i].valid_from + '</p>');
  $('#display').append([i]);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="display"></div>

Также стоит отметить, что вы можете использовать map() для построения массива строк, который вы можете append() использовать только один раз для повышения производительности. Попробуй это:

let data = {
  results: [{
    value_inc_vat: 'value_inc_vat1',
    valid_from: 'valid_from1'
  },{
    value_inc_vat: 'value_inc_vat2',
    valid_from: 'valid_from2'
  }]
}

var html = data.results.map(function(result) {
  return '<p>Price: ' + result.value_inc_vat + '</p><p>Time : ' + result.valid_from + '</p>';
  
  // interpolated string version, note this won't work in IE:
  //return `<p>Price: ${result.value_inc_vat}</p><p>Time : ${result.valid_from}</p>`;
});
$('#display').append(html);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="display"></div>
0
Rory McCrossan 23 Окт 2019 в 09:05

Примечание: -Этот ответ основан на вашем вопросе. массив создан мной. Я думаю, что код работает правильно, и проблема связана с html (), который удаляет старый HTML и добавляет новый HTML, и вам нужно просто заменить html() на append () добавит новые коды HTML .

let data = {
  results: [{
    value_inc_vat: '1',
    valid_from: 'Today'
  }]
}

for (let i = 0; i < data.results.length; i++) {
  $('#display').append('<p> Price: ' + data.results[i].value_inc_vat + '</p>');
  $('#display').append('<p> Time : ' + data.results[i].valid_from + '</p>');
  $('#display').append([i]);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="display"></div>
0
Parth Raval 23 Окт 2019 в 09:19