如何在ES6中生成不重复数字的数组?

时间:2019-03-20 14:11:56

标签: javascript

我正在尝试在ES6中生成随机数数组-不应重复数字。

当前,我的函数生成一个随机数数组,但它们在重复:

winArray = [...Array(6)].map(() => Math.floor(Math.random() * 53));

这是我发现的非ES6解决方案: Non-ES6 solution

此带有Set的解决方案未在for循环中运行:

for (let i = 1; i <= draws; i += 1) {
      // Generating a random array of 6 number

      const winArray = new Set();
      while (winArray.size < 6) winArray.add(Math.floor(Math.random() * 53));
}

3 个答案:

答案 0 :(得分:6)

您可以使用Set并填充此集合,直到所需大小为止。

var numbers = new Set;

while (numbers.size < 6) numbers.add(Math.floor(Math.random() * 53));

console.log(...numbers);

要获得更多的数字集合,您可以为每个平局设置一个空集合。

var numbers,
    draws = 5,
    i;

for (i = 0; i < draws; i++) {
    numbers = new Set;
    while (numbers.size < 6) numbers.add(Math.floor(Math.random() * 53));

    console.log(...numbers);
}

答案 1 :(得分:2)

Set仅允许唯一的属性(不允许重复)。

let winArray = [...Array(6)].map(() => Math.floor(Math.random() * 53));

winArray = [...new Set(winArray)]

console.log(winArray)

答案 2 :(得分:0)

这是一种解决方案,可以洗改唯一编号列表(永远不会重复)。

for (var a=[],i=0;i<100;++i) a[i]=i;

function shuffle(array) {
  var tmp, current, top = array.length;
  if(top) while(--top) {
    current = Math.floor(Math.random() * (top + 1));
    tmp = array[current];
    array[current] = array[top];
    array[top] = tmp;
  }
  return array;
}

a = shuffle(a);