如何从数组中随机选择具有特定属性值的对象

时间:2019-10-13 21:32:45

标签: javascript jquery arrays javascript-objects

我正在创建一个定时琐事游戏,该游戏从数组中随机选择一个对象中存储的问题。当前,我让程序从数组中随机选择一个问题,但有时它会选择一个已经选择的问题。我希望我的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 :(得分:0)

我建议您重新考虑您的方法:即使您设法对其进行良好的编码,随着时间的流逝,性能也会越来越差。试想一下,有1000个问题池,其中已经回答了999个问题:您需要遍历循环次数,以最终选择最后一个问题。

一个典型的构造是具有两个列表:一个列出尚未提出的问题,另一个列出已经提出的问题。选择问题后,将其从一个列表中删除,然后附加到另一个列表中。如果您的逻辑需要,没有什么可以阻止您同时拥有组合列表。

然后,您可以轻松地从“未使用”列表中选择一个随机问题,而不会出现任何问题。