@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, что не так я сделал?
  • Вопрос задан
  • 89 просмотров
Решения вопроса 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();
            })


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

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽