How to access next object in an array by incrementing

Solution 1:

Take a global variable let currentQuestionIndex = 0; & update your nextQuestion function as below. Also update your startQuiz() function and set currentQuestionIndex = 0; & replace showQuestion(myQuestions[0]); with nextQuestion();

function nextQuestion() {
  // Add condition so at last question it will stop at last question
  if (myQuestions.length > currentQuestionIndex) {
    showQuestion(myQuestions[currentQuestionIndex]);
    currentQuestionIndex++;
  }
}

function startQuiz() {
  container.style.visibility = "visible";
  btn_start.style.visibility = "hidden";
  currentQuestionIndex = 0;
  nextQuestion();
}

Your complete code will look like below. I have commented some of your code just for testing purpose.

let currentQuestionIndex = 0;
let myQuestions = [
    {
        question: "What's 2+2?",
        answers: [
            { text: "4", correct: true },
            { text: "2", correct: false },
            { text: "10", correct: false },
            { text: "1", correct: false },
        ],
    },
    {
        question: "What's 10+10?",
        answers: [
            { text: "20", correct: true },
            { text: "2", correct: false },
            { text: "18", correct: false },
            { text: "0", correct: false },
        ],
    },
];

function startQuiz() {
  //container.style.visibility = "visible";
  //btn_start.style.visibility = "hidden";
  currentQuestionIndex = 0;
  nextQuestion();
}

function showQuestion(questionAndAnswers) {
  // temp code for alert
  alert(questionAndAnswers.question);
  //const shuffledAnswers = _.shuffle(questionAndAnswers.answers);
  //questionTag.innerText = questionAndAnswers.question;
  //answerTag[0].innerText = shuffledAnswers[0].text;
  //answerTag[1].innerText = shuffledAnswers[1].text;
  //answerTag[2].innerText = shuffledAnswers[2].text;
  //answerTag[3].innerText = shuffledAnswers[3].text;
}

function nextQuestion() {
  // Add condition so at last question it will stop at last question
  if (myQuestions.length > currentQuestionIndex) {
    showQuestion(myQuestions[currentQuestionIndex]);
    currentQuestionIndex++;
  }
}
<input type='button' value='Start Quiz' onclick=startQuiz() />
<input type='button' value='Next question' onclick=nextQuestion() />

Solution 2:

You can store your current question index and use that to step through the list:


let currentQuestionIndex = 0;
let myQuestions = [
    {
        question: "What's 2+2?",
        answers: [
            { text: "4", correct: true },
            { text: "2", correct: false },
            { text: "10", correct: false },
            { text: "1", correct: false },
        ],
    },
    {
        question: "What's 10+10?",
        answers: [
            { text: "20", correct: true },
            { text: "2", correct: false },
            { text: "18", correct: false },
            { text: "0", correct: false },
        ],
    },
];
function startQuiz() {
    container.style.visibility = "visible";
    btn_start.style.visibility = "hidden";
    showQuestion(myQuestions[0]);
}
function showQuestion(questionAndAnswers) {
    const shuffledAnswers = _.shuffle(questionAndAnswers.answers);
    questionTag.innerText = questionAndAnswers.question;
    answerTag[0].innerText = shuffledAnswers[0].text;
    answerTag[1].innerText = shuffledAnswers[1].text;
    answerTag[2].innerText = shuffledAnswers[2].text;
    answerTag[3].innerText = shuffledAnswers[3].text;
}
function nextQuestion() {
    const nextIndex = currentQuestionIndex + 1;
    if (nextIndex < myQuestions.length - 1) {
      showQuestion(myQuestions[nextIndex]);
      currentQuestionIndex = nextIndex;
    } else {
        console.log('end of question list');
    }
}