繁体   English   中英

如何从数组中随机选择具有特定属性值的 select 和 object

[英]How to randomly select an object with a specific property value out of an array

我正在创建一个定时琐事游戏,它从数组中随机选择存储在 object 中的问题。 目前,我有程序随机 select 来自数组的一个问题,但它有时会选择一个已经选择的问题。 我希望我的 currentQuestion 变量仅是数组中的 object,带有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 生成一个新问题并设置它们是否已被选为真

   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);
  }

我建议您重新考虑您的方法:即使您设法很好地编写代码,性能也会随着时间的推移变得越来越差。 试想一下 1000 个问题,其中 999 个问题已经得到回答:您需要多次运行循环,最终 select 最后一个问题。

一个典型的结构是有两个列表:一个是尚未提出的问题,另一个是已经提出的问题。 当您选择一个问题时,您将其从一个列表中删除,并将 append 移到另一个列表中。 如果您的逻辑需要,没有什么能阻止您也拥有一个组合列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM