Создание ненумерованного списка из массива
Вообще суть моей задачи состоит в создании онлайн теста на JS. При этом мне необходимо использовать такой шаблон массива. И у меня все никак не выходит создать список из этого бреда И да, не обращайте внимание на код после // Подскажите, как сделать так, чтобы на страницу выводился список с вопросами. Ну и если не сложно, как сделать тоже самое с ответами (ну логично, чтобы их можно было выбирать)
const question1 = [
{
question1: 'Kto ubil Marka?',
answers: [
{ text: 'Oksi', correct: true },
{ text2: 'Mark', correct: false }
]
}
]
const question2 = [
{
question2: 'Da ili net?',
answers: [
{ text: 'net', correct: true },
{ text2: 'da', correct: false }
]
}
]
//document.getElementById("que").innerHTML = JSON.stringify(question1[1]);
html = '<ul>';
question1.forEach(function (item, i, arr){
html += '<li>' +item+'</li>';
});
html += '/<ul>'
</script>```
Ответы (1 шт):
Автор решения: Aleksandr Belous
→ Ссылка
Ну структура вопросов у вас явно неправильная. Лучше всё в один массив сделать, где каждый элемент это вопрос с данными. И использовать его для генерации вопросов.
const questions = [{
question: 'Кто убил Марка?',
answers: [
{ text: 'Окси', id: 1 },
{ text: 'Марк', id: 2 }
],
correct: 1
},
{
question: 'Да или нет?',
answers: [
{ text: 'Нет', id: 3 },
{ text: 'Да', id: 4 }
],
correct: 3
}
];
const makeQuestion = (data) => {
const makeAnswerVariant = (data, question) => {
const li = document.createElement('li');
const input = document.createElement('input');
input.type = 'radio';
input.id = data.id;
input.name = question;
const label = document.createElement('label');
label.setAttribute('for', data.id);
label.textContent = data.text;
li.append(input, label);
return li;
};
const question = document.createElement('h3');
question.textContent = data.question;
const variants = data.answers.map((item) => {
return makeAnswerVariant(item, data.question);
});
const list = document.createElement('ul');
list.append(...variants);
return [question, list];
};
const makeQuiz = (questions) => {
const items = questions.flatMap(makeQuestion);
const wrapper = document.querySelector('.questions');
wrapper.append(...items);
};
makeQuiz(questions);
<div class="questions"></div>