JavaScript 随机选择不重复元素的死循环问题及解决方案
JavaScript 随机选择不重复元素的死循环问题及解决方案
在使用 JavaScript 随机选择不重复元素时,可能会遇到死循环问题。例如,以下代码:
const options = ['apple', 'banana', 'orange', 'kiwi', 'grape'];
const usedIndexes = []; // 记录已经出现过的随机数
function randomSelect() {
const randomIndex = Math.floor(Math.random() * options.length);
if (usedIndexes.includes(randomIndex)) {
return randomSelect(); // 继续生成随机数
} else {
usedIndexes.push(randomIndex);
return options[randomIndex];
}
}
这段代码中,可能会发生死循环的原因是当所有的选项都被选中后,usedIndexes数组会包含所有的索引,此时会一直调用randomSelect()函数,但无法生成新的随机数,导致死循环。
为了解决这个问题,可以在usedIndexes数组中记录选项的总数,当usedIndexes数组的长度等于选项的总数时,表示所有选项都已经被选中,此时可以清空usedIndexes数组,重新开始选择。修改后的代码如下:
const options = ['apple', 'banana', 'orange', 'kiwi', 'grape'];
const usedIndexes = []; // 记录已经出现过的随机数
function randomSelect() {
if (usedIndexes.length === options.length) {
usedIndexes.length = 0; // 清空数组
}
const randomIndex = Math.floor(Math.random() * options.length);
if (usedIndexes.includes(randomIndex)) {
return randomSelect(); // 继续生成随机数
} else {
usedIndexes.push(randomIndex);
return options[randomIndex];
}
}
通过清空usedIndexes数组,我们确保了每次调用randomSelect()函数时都能生成新的随机数,从而避免了死循环。
原文地址: https://www.cveoy.top/t/topic/nsdn 著作权归作者所有。请勿转载和采集!