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

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

  }


森林海
浏览 142回答 1
1回答

紫衣仙女

我建议你重新考虑你的方法:即使你设法把它写得很好,随着时间的推移,性能会越来越差。试想一下有 1000 道问题,其中 999 道已经得到回答:您需要尽可能多地运行循环才能最终选择最后一个问题。一个典型的结构是有两个列表:一个是尚未提出的问题,另一个是已经提出的问题。当您选择一个问题时,您将其从一个列表中删除并将其附加到另一个列表中。如果您的逻辑需要,没有什么能阻止您拥有一个组合列表。然后,您可以轻松地从“未使用”列表中随机选择一个问题,而不会出现任何问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript