我正在创建一个定时琐事游戏,它从数组中随机选择一个存储在对象中的问题。目前,我让程序从数组中随机选择一个问题,但它有时会选择一个已经被选择的问题。我希望我的 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 回答
![?](http://img1.sycdn.imooc.com/545850ee0001798a02200220-100-100.jpg)
紫衣仙女
TA贡献1839条经验 获得超15个赞
我建议你重新考虑你的方法:即使你设法把它写得很好,随着时间的推移,性能会越来越差。试想一下有 1000 道问题,其中 999 道已经得到回答:您需要尽可能多地运行循环才能最终选择最后一个问题。
一个典型的结构是有两个列表:一个是尚未提出的问题,另一个是已经提出的问题。当您选择一个问题时,您将其从一个列表中删除并将其附加到另一个列表中。如果您的逻辑需要,没有什么能阻止您拥有一个组合列表。
然后,您可以轻松地从“未使用”列表中随机选择一个问题,而不会出现任何问题。
添加回答
举报
0/150
提交
取消