我想运行一个函数,每次从数组中随机选择一个以前未选择的元素。如果选择了所有元素,我想重置使用的元素并从头开始。
希望这是有道理的。
我已经有一个从数组中选择随机元素的函数。但我也不希望它选择之前选择的元素,除非所有元素都已选择。
这是我到目前为止所得到的(归功于@Kelly):
var item = items[Math.floor(Math.random() * items.length)]
最佳答案
你可以尝试这样的事情:
想法
- 创建一个实用函数,它接受一个数组并返回一个随机值。
- 在此数组内,维护 2 个数组、选项和数据。
- 在每次迭代中,从
data
中删除 1 项并将其放入chosenItems
- 长度一旦为
data
达到0
,设置chosenItems
或originalArray
作为数据并重复过程。
这种方法的好处是,
- 您不需要维护和传递数组变量。
- 它可以通用并多次使用。
function randomize(arr) {
let data = [...arr];
let chosenItems = [];
function getRandomValue() {
if (data.length === 0) {
data = chosenItems;
chosenItems = [];
}
const index = Math.floor(Math.random() * data.length);
const choice = data.splice(index, 1)[0];
chosenItems.push(choice);
return choice;
}
return {
randomItem: getRandomValue
}
}
const dummyData = [ 1,2,3,4,5 ];
const randomizeData = randomize(dummyData);
for (let i = 0; i< 10; i++) {
console.log(randomizeData.randomItem())
}
关于javascript - 如何在 JavaScript 中从数组中随机选择之前未选择的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812026/