为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2021-11-18 21:09:08
我正在创建一个定时琐事游戏,它从数组中随机选择一个存储在对象中的问题。目前,我让程序从数组中随机选择一个问题,但它有时会选择一个已经被选择的问题。我希望我的 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 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

我建议你重新考虑你的方法:即使你设法把它写得很好,随着时间的推移,性能会越来越差。试想一下有 1000 道问题,其中 999 道已经得到回答:您需要尽可能多地运行循环才能最终选择最后一个问题。

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

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


查看完整回答
反对 回复 2021-11-18
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信