【问题标题】:How to generate an array with not repeating numbers in ES6?如何在 ES6 中生成不重复数字的数组?
【发布时间】:2019-08-11 06:25:13
【问题描述】:

我正在尝试在 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));
}

【问题讨论】:

标签: javascript


【解决方案1】:

Set 只允许唯一属性(不能重复)。

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

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

console.log(winArray)

【讨论】:

  • 后视镜是 20/20,Nina 砸了它。
【解决方案2】:

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

var numbers = new Set;

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

console.log(...numbers);

为了获得更多的 numbser 集,您可以在每次抽奖时取一个空集。

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);
}

【讨论】:

  • 我正在尝试在 for 循环中使用此代码,但看起来这种方法在 for 循环中不起作用
  • for 循环只需要比较部分。请参阅编辑。
  • 我的意思是数组生成之外的 for 循环 :) 请看一下编辑后的帖子
  • 我不明白你想得到什么。顺便说一句,winArray 是一个集合,而不是一个数组。为什么你有一个 for 循环。它是干什么用的?
  • 我正在创建一个彩票应用程序。 For-loop 循环遍历每个 drop 并为每次绘制创建一个唯一的数字数组。这对你有意义吗?
【解决方案3】:

这是一个随机排列唯一数字列表的解决方案(永远不会重复)。

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2017-02-16
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2017-05-23
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多