在数组中生成唯一数字

时间:2018-10-23 03:27:08

标签: javascript arrays

我是Java语言的新手,它试图使自己适应FunctionsFor循环和If语句。我正在做一个简单的练习,该练习从一个函数调用中生成5个随机数。我努力拼凑的一点逻辑是比较Math.random创建的数字,这些数字被推到数组中。最好的方法来确保要推入数组的所有数字都是唯一的(无重复)?我会在If代码块中添加一个For语句来检查每个数字,如果它们匹配,请重新运行Math.random函数?试图找出这是否是解决问题的最佳方法。

function randoNumbers(min, max){

let randomNumbers = [];

for (let counter = 0; counter < 5 ; counter++){
    randomNumbers.push(Math.floor(Math.random() * (max - min) + +min));
    }
    console.log(randomNumbers);

}

randoNumbers(1, 10);

2 个答案:

答案 0 :(得分:2)

一种非常简单的解决方案是生成数字,直到生成的数字尚未包含在数组中,然后将其推送到结果数组中:

function randoNumbers(min, max) {
  const randomNumbers = [];
  for (let counter = 0; counter < 5; counter++) {
    let num;
    do {
      num = Math.floor(Math.random() * (max - min) + min);
    }
    while (randomNumbers.includes(num))
    randomNumbers.push(num);
  }
  console.log(randomNumbers);
}

randoNumbers(1, 10);

为获得更好的复杂性,您可以改用Setset.hasarr.includes更快):

function randoNumbers(min, max) {
  const set = new Set();
  for (let counter = 0; counter < 5; counter++) {
    let num;
    do {
      num = Math.floor(Math.random() * (max - min) + min);
    }
    while (set.has(num))
    set.add(num);
  }
  console.log([...set]);
}

randoNumbers(1, 10);

答案 1 :(得分:2)

有很多方法可以解决此问题。我正在贡献自己的解决方式。

function randoNumbers(min, max) {

  let randomNumbers = [];

  for (; randomNumbers.length < 5;) {
    const value = Math.floor(Math.random() * (max - min) + +min);
    if (!randomNumbers.includes(value))
      randomNumbers.push(value);
  }
  console.log(randomNumbers);

}



randoNumbers(1, 10);