好吧,所以我认为我是这样做的,但事实上出了问题,因为我的代码永远运行。请记住,我上高中并且对编码很陌生,因此可能有一个非常简单的解决方案,但我无法解决这个问题。如何检查某个项目是否出现在数组中,并重新选择新的项目?
我有一个数据文件,其中有各种问题数据。我的目标是从数据中随机选择一个问题,然后根据id数组检查问题的ID。如果该ID出现在该数组中,我想重新运行随机选择功能来选择另一个问题。我想继续这样做,直到我有一个没有出现的问题。
var dataFile = {
'01': { questionID: '00100A', text: 'Random question number one?'},
'02': { questionID: '00200B', text: 'Random question number two?'},
'03': { questionID: '00300C', text: 'Random question number three?'},
'04': { questionID: '00400D', text: 'Random question number four?'},
'05': { questionID: '00500E', text: 'Random question number five?'},
'06': { questionID: '00600F', text: 'Random question number six?'},
'07': { questionID: '00700G', text: 'Random question number seven?'},
'08': { questionID: '00800H', text: 'Random question number eight?'},
'09': { questionID: '00900I', text: 'Random question number nine?'},
'10': { questionID: '01000J', text: 'Random question number ten?'}};
var questionsAsked = ['00100A', '00300C', '00500E', '00700G', '00900I'];
const keys = Object.keys(dataFile).map(key => dataFile[key]);
let selectedQuestion = keys[Math.floor(Math.random() * keys.length)];
let questionID = (selectedQuestion.questionID)
if (questionsAsked.includes(questionID)) {
let selectedQuestion = keys[Math.floor(Math.random() * keys.length)];
return selectedQuestion;
} else {
questionsAsked.push(questionID);
return selectedQuestion;
}
数据文件中有9个数据。还有一些已经被问到的问题。我首先映射dataFile以获取问题数据,然后从中选择一个随机问题。我从该问题中提取questionID,然后使用if ... else语句来检查问题ID是否出现在questionsAsked数组中。如果是这样,我重新选择另一个问题。如果没有,则将id推入数组中,并返回问题。
我的问题是,如果if语句为true,则会选择另一个问题,但不会再次检查它是否出现在questionsAsked数组中。也尝试了一段时间循环,看看是否有什么区别,但那是当我的代码卡在一个无限循环。
while (questionsAsked.includes(guID)) {
let selectedQuestion = keys[Math.floor(Math.random() * keys.length)];
let questionID = (selectedQuestion.questionID);
}
questionsAsked.push(guID);
return selectedQuestion;
任何建议将非常大大appriciated