Как случайным образом выбрать объект с определенным значением свойства из массива - PullRequest
0 голосов
/ 14 октября 2019

Я создаю хронологическую игру, которая случайным образом выбирает вопрос, сохраненный в объекте, из массива. В настоящее время у меня есть программа случайным образом выбирает вопрос из массива, но иногда он выбирает тот, который уже был выбран. Я хочу, чтобы моя переменная currentQuestion была только объектом из массива с questionChosen: false

Я пробовал цикл while, но не думаю, что отформатировал его правильно, из-за чего программа бесконечно зацикливается, поэтому не работает.

   // This is how objects are stored in the questionsArr
    var q1 = {
       title: "Question 1",
       a1: "answer 1.",
       a2: "answer 2.",
       a3: "answer 3.",
       a4: "answer 4.",
       questionChosen: false,
    };

Это моя функция, которая генерирует новые вопросы и устанавливает, были ли они выбраны для истинных

   function newQuestion() {
      time = 30;
      var currentQuestion = questionsArr[Math.floor(Math.random() * questionsArr.length)];

     if (intervalId && intervalId >= 0) {
         clearInterval(intervalId);
     }
     if (!clockRunning) {
        clockRunning = true;
     }

     currentQuestion.questionChosen = true;
     intervalId = setInterval(countdown, 1000);
     console.log(intervalId);
     console.log(clockRunning);
     $("#question-box").text(currentQuestion.title);
     $("#a1").text(currentQuestion.a1);
     $("#a2").text(currentQuestion.a2);
     $("#a3").text(currentQuestion.a3);
     $("#a4").text(currentQuestion.a4);
  }

1 Ответ

0 голосов
/ 14 октября 2019

Я рекомендую переосмыслить ваш подход: даже если вам удастся хорошо его кодировать, производительность будет со временем ухудшаться. Подумайте о пуле из 1000 вопросов, на которые уже было дано 999 ответов: вам нужно будет проходить цикл столько раз, сколько нужно, чтобы окончательно выбрать последний вопрос.

Типичная конструкция - иметьдва списка: в одном есть еще не заданные вопросы, в другом уже заданные. Выбрав вопрос, вы удаляете его из одного списка и добавляете в другой. Ничто не мешает вам также иметь комбинированный список, если ваша логика нуждается в этом.

Вы можете легко выбрать случайный вопрос из списка "неиспользованных" без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...