I am making a trivia game that uses an array of objects.
const questions = [
{
question: 'What year did the United State become independent?',
answers: [
{ text: '1776', correct: true },
{ text: '1676', correct: false },
{ text: '1576', correct: false },
{ text: '1876', correct: false }
]
},
I think the correct way is to get the index of the correct answer by using .find
, getting the the index of the selected answer, then use an if statement to compare the two. If they match then the console will log “correct” or “incorrect” otherwise. I am having trouble getting the index of corretAnswer and also selectedAnswer.
When I use this code and console log it, both variables return undefined.
const answerButtons = document.querySelectorAll('.answers-btn');
function checkAnswer() {
let correctAnswer = randomQuestion.answers.find((answer, index) => {
return answer[index] === true;
})
answerButtons.forEach((answerButton, index) => {
answerButton.addEventListener('click', () => {
let selectedAnswer = answerButton[index];
return selectedAnswer;
})
})
}
<button id="answers-btn-1" onclick="checkAnswer()" class="answers-btn"></button>
<button id="answers-btn-2" onclick="checkAnswer()" class="answers-btn"></button>
<button id="answers-btn-3" onclick="checkAnswer()" class="answers-btn"></button>
<button id="answers-btn-4" onclick="checkAnswer()" class="answers-btn"></button>
Advertisement
Answer
I tried to create a solution with as least code possible. First, you don’t need to add an event listener to each button, you could just make each call a specific index from HTML. Secondly, since you are creating your answers list with a correct
property, you don’t need to iterate it. Just get the one the user selected and check the property.
Hope it helps.
const currentQuestion = 0;
const questions = [{
question: 'What year did the United State become independent?',
answers: [{
text: '1776',
correct: true
},
{
text: '1676',
correct: false
},
{
text: '1576',
correct: false
},
{
text: '1876',
correct: false
}
]
}]
function checkAnswer(bntIndex) {
let answer = questions[currentQuestion].answers[bntIndex];
console.log(answer.correct)
}
<button id="answers-btn-1" onclick="checkAnswer(0)" class="answers-btn">1</button>
<button id="answers-btn-2" onclick="checkAnswer(1)" class="answers-btn">2</button>
<button id="answers-btn-3" onclick="checkAnswer(2)" class="answers-btn">3</button>
<button id="answers-btn-4" onclick="checkAnswer(3)" class="answers-btn">4</button>