嗨,我想在列表的特定范围内获得随机索引。 之后,如果我想要列表的另一个随机索引,则不应再次返回该索引。
答案 0 :(得分:0)
这是一种生成[min, max)
范围内且不重复的随机数的方法。
它使用查找对象存储到目前为止为每个范围返回的值。
如果无法返回数字,则返回undefined
。
const usedIndicesByRange = {};
function randomIntInRange(min, max) {
const key = `${min}-${max}`;
if (!(key in usedIndicesByRange)) {
usedIndicesByRange[key] = [];
}
if (usedIndicesByRange[key].length === max - min) {
return undefined;
}
const getIdx = () => Math.floor(Math.random() * (max - min) + min);
let idx = getIdx();
while (usedIndicesByRange[key].includes(idx)) {
idx = getIdx();
}
usedIndicesByRange[key].push(idx);
return idx;
}
console.log([...Array(12)].map(() => randomIntInRange(0, 10)));