我编写了一个函数,该函数生成具有10个随机生成的唯一值的数组。

我想扩展它,以便不包括某些值。

这是我的代码:

let excludedValues = [20,32,40,46,64,66,14,30,34];
let randomArray = [];

  while(randomArray.length < 10){
    let randomValue = Math.floor(Math.random() * 100) + 1;

    let valueNotAllowed = excludedValues.includes(randomValue);
    while (valueNotAllowed) {
      randomValue = Math.floor(Math.random() * 100) + 1;
      valueNotAllowed = excludedValues.includes(randomValue);
    }

    if(randomArray.indexOf(randomValue) === -1) randomArray.push(randomValue);
}
console.log(randomArray);

它创建一个长度为10的数组,其唯一值在1到100之间,但是ii仍包括excludedValues数组中的值

我如何才能使这些值不出现在数组中而工作

提前致谢

最佳答案

作为已发布答案的替代方法,您可以使用Set

function getUniqueRandomValues(exclusion = []) {
  // By definition, values inside of a Set are unique
  const randomArray = new Set();

  do {
    const randomValue = Math.floor(Math.random() * 100) + 1;

    // If the exclusion rule is satisfied push the new value in the random array
    if (!exclusion.length || !exclusion.includes(randomValue)) {
      randomArray.add(randomValue);
    }
  } while (randomArray.size < 10);

  return Array.from(randomArray);
}

console.log(getUniqueRandomValues([20, 32, 40, 46, 64, 66, 14, 30, 34]));

10-06 15:14