@aleshaykovlev
html, css, js, node, webpack, sass, react

Не все добавляется в массив, что не так?

const questions = [
    {
        question: 'Вопрос', 
        done: 'a',
        answers: [
            {text: 'Ответ'},
            {text: 'Ответ'},
            {text: 'Ответ'}
        ]
    },
    {
        question: 'Вопрос',
        done: 'b',
        answers: [
            {text: 'Ответ'},
            {text: 'Ответ'},
            {text: 'Ответ'}
        ]
    },
    {
        question: 'Вопрос',
        done: 'a',
        answers: [
            {text: 'Ответ'},
            {text: 'Ответ'},
            {text: 'Ответ'}
        ]
    },
    {
        question: 'Вопрос,
        done: 'b',
        answers: [
            {text: 'Ответ'},
            {text: 'Ответ'}
        ]
    }
];


quizEndBtn.addEventListener('click', () => {
    const name = document.querySelector('#name');
    const response = document.querySelectorAll('#response');
    const endResponse = document.querySelector('.end-response');

    if (name.value) {
        questions.map(question => {
            const doneArray = [...response].filter(resp => {
                return resp.value.toString().toLowerCase() === question.done.toString().toLowerCase();
            })

            return endResponse.textContent = `${name.value} ответил на ${doneArray.length} вопроса из ${questions.length}`;
        })
    } else {
        endResponse.textContent = 'Заполните имя!';
    }
})


Когда я писал все правильно в resp.value (a,b,a,b), то doneArray.length он равен 2, но должен быть равен 4, что не так я сделал?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
vachunya
@vachunya
Бог верстки, JS maniac, React bomberman
Добрый день,
Есть несколько вопросов:
Во-первых почему у вас несколько элементов с одинаковыми id??
const response = document.querySelectorAll('#response');


Во-первых зачем вам нужен метод .toString() в коде? пока не пойму как у вас реализовано, но проверка у вас странная для меня.

И наконец в-третьих киньте в консоль ваш объект или на этапе проверки, или и там и там, и сразу станет ясно что вы делаете не так, полагаю что проблема в document.querySelectorAll('#response');

Попробуйте так:

questions.map(question => {
          console.log(response)
            const doneArray = [...response].filter(resp => {
console.log(`resp.value ${resp.value}`)
console.log(`question.done ${question.done}`)
                return resp.value.toString().toLowerCase() === question.done.toString().toLowerCase();
            })


Я мог не уловить контекста, но такое ощущение что вы немного вслепую кодите))))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы