#jquery
Вопрос:
здравствуйте, поэтому я хочу отобразить данные json ( вопрос и его ответы ).я использую .forEach()
для циклического переброса вопросов ,чтобы получить ответ на вопрос, а другой .forEach()
-для переброса его ответов, но показывает только вопрос и возвращает ответы как undefined
. я проверил, правильно ли я получаю все данные, и это так.
похоже, это ошибка при отображении объектов ответов.
res.questions.forEach((el) => {
$('#additional').before($('<section>
<h1 class="f-title">' el.question '</h1>
<h3 class="f-subtitle">' el.commentary '</h3>
<div class="container1">'
el.answers.forEach((i) => {
'<input type="button" class="buttn" value="' i.answer '"/>'
}) '</div>
<input type="button" name="previous" class="previous action-button" value="Previous" />
<input type="button" name="next" class="next action-button" value="Next" />
</section>'));
});
Ответ №1:
forEach()
ничего не возвращает, поэтому вы объединяетесь undefined
в свой HTML.
Вы можете использовать .map()
для возврата массива всех <input>
строк и .join()
объединения их вместе в одну строку.
res.questions.forEach((el) => {
$('#additional').before($('<section>
<h1 class="f-title">' el.question '</h1>
<h3 class="f-subtitle">' el.commentary '</h3>
<div class="container1">'
el.answers.map((i) => {
'<input type="button" class="buttn" value="' i.answer '"/>'
}).join("") '</div>
<input type="button" name="previous" class="previous action-button" value="Previous" />
<input type="button" name="next" class="next action-button" value="Next" />
</section>'));
});
Комментарии:
1. спасибо за повтор @Barmar, на самом деле я хочу зациклить массив ответов, содержащий объекты, и отобразить его в виде отдельных объектов для элементов кнопок ввода.
2. Разве не для этого все это делается?
map()
выполняет цикл по массиву объектов и возвращает массив результатов функции.join()
объединяет их в одну строку.3. да, вы правы, но это не сработало, потому что он не мог зациклить массив внутри
.before()
(и это то, что неправильно). так что я сделал это ,это не красиво, но работает.
Ответ №2:
по-видимому, вы не можете добавить объект, а затем выполнить цикл внутри него.вот почему .forEach()
или map()
появиться, undefined
потому что это не было распознано внутри .before()
. поэтому мне пришлось использовать его перед добавлением объектов ,поэтому, когда первый .foreach()
закончит, второй достигнет своих объектов и выполнит циклический бросок.
res.questions.forEach((el) => {
$('#additional').before('<section id="' el.id '">
<h1 class="f-title">' el.question '</h1>
<h3 class="f-subtitle">' el.commentary '</h3>
<div class="container1">
</div>
<input type="button" name="previous" class="previous action-button" value="Previous" />
<input type="button" name="next" class="next action-button" value="Next" />
</section>')
});
res.questions.forEach((el) => {
el.answers.forEach((i) => {
$("#dynamic_frm").find("section#" el.id "> .container1").append('
<input type="button" class="buttn" value="' i.answer '" />'
)})
})
});