我正在创建一个定时琐事游戏,该游戏从数组中随机选择一个对象中存储的问题。当前,我让程序从数组中随机选择一个问题,但有时它会选择一个已经选择的问题。我希望我的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);
}
答案 0 :(得分:0)
我建议您重新考虑您的方法:即使您设法对其进行良好的编码,随着时间的流逝,性能也会越来越差。试想一下,有1000个问题池,其中已经回答了999个问题:您需要遍历循环次数,以最终选择最后一个问题。
一个典型的构造是具有两个列表:一个列出尚未提出的问题,另一个列出已经提出的问题。选择问题后,将其从一个列表中删除,然后附加到另一个列表中。如果您的逻辑需要,没有什么可以阻止您同时拥有组合列表。
然后,您可以轻松地从“未使用”列表中选择一个随机问题,而不会出现任何问题。