0

SETUP Description: I am building a trivia game that has a spinner. This spinner is split up into 6 categories (the 6th category being ALL previous 5 categories combined). The first 5 categories will have it's own set of questions. Once the spinner stops on a category a form appears that will ask a series of questions in order according to it's category. Each question has 3 choices, 1 of them being the correct choice.

Below is a short question bank array to illustrate what I am thinking: ```

var questionBankArray = 
 [{
    category: "Category1",
    question: "What does the following expression return? <br> 3 / 'bob';",
    choices: ["undefined", "ReferenceError", "NaN"],
    correctAnswer: "NaN"
   },{
     category: "Category1"
     question: "What is a method?",
     choices: ["Used to describe an object.", "A function assigned to an object.", "Performs a function on one or more operands or variables."],
     correctAnswer: "A function assigned to an object."
   },{
     category: "Category2"
     question: "Which company first implemented the JavaScript language?",
     choices: ["Netscape Communications Corp.", "Microsoft Corp.", " Sun Microsystems Corp."],
     correctAnswer: "Netscape Communications Corp."
    },{
     category: "Category2"
     question: "When was the first release of a browser supporting JavaScript?",
     choices: ["1996", "1995", " 1994"],
     correctAnswer: "1995"
    },
 ];

```

I would like to go through the questionBanArray of objects, and by category, shuffle within that category. I also want to be able to shuffle the choices within each question of that category. How would I go about this? Would it be harder easier to rewrite it to look like this:

questionBankArray = 
[{
  CategoryBank1: 
    [{
        question1: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
        },{
        question2: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
     }],
   CategoryBank2: 
     [{
        question1: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
        },{
        question2: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
      }]
 }];
1

1 Answer 1

2

I think the ideal structure would be something like this:

questionBankArray = 
  [{
    category:"first category",
    questions: 
      [{
        question1: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
      },{
        question2: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
      }]
  },
  {
    category: "second category",
    questions:
      [{
        question1: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
      },{
        question2: "What is blank?", 
        choices: ["choice1","choice2","answer"], 
        answer: "answer"
      }]
    }];

Create a shuffle function:

function shuffle(o){
    for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
}

Start looping over your outer array and go deeper and deeper, applying the shuffle function from the most inner level to the outer array

for (var category in questionBankArray) {
  for (var question in category.questions) {
    shuffle(question.choices);
  }
  shuffle(category);
}
shuffle(questionBankArray);
Sign up to request clarification or add additional context in comments.

1 Comment

Added an example data structure.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.