如何仅获得一次特定范围内的随机索引

时间:2019-02-09 00:28:25

标签: javascript random indexing

嗨,我想在列表的特定范围内获得随机索引。 之后,如果我想要列表的另一个随机索引,则不应再次返回该索引。

1 个答案:

答案 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)));