【问题标题】:Picking Non-duplicate Random Numbers using JavaScript使用 JavaScript 挑选不重复的随机数
【发布时间】:2021-10-08 00:30:25
【问题描述】:

如何在没有重复号码的情况下随机选择 5 个彩票号码?下面的代码是我到目前为止所拥有的,我只是不知道在哪里插入代码以循环选择重复的数字并重新分配新的数字?我尝试将 if 和 else 与 forEach 函数一起添加,但没有奏效。这是我到目前为止的代码。提前谢谢你。

let lotto = [];
    for(let i = 0; i < 5; i++){
      lotto[i] = Math.floor(Math.random() * 69) + 1;
    }

const sorting = lotto.sort((a,b) => a - b);
    console.log(sorting);

【问题讨论】:

  • 对于那个用例,我会创建一个包含所有数字的数组,将其打乱(例如,使用 Fisher-Yates 算法)并选择第一个元素。

标签: javascript random duplicates numbers


【解决方案1】:

两种解决方案:

  1. 创建一个数字列表,然后从中挑选(并删除)5 个。
  2. 创建一个循环,不断生成数字,直到它有 5 个唯一的数字。

您的尝试可以适应解决方案 2:

let lotto = [];
while(lotto.length < 5) {
    console.log('Got', lotto.length, 'numbers!');
    // Changed 69 to 5 to "force" clashes (well, make it very likely)
    const num = Math.floor(Math.random() * 5) + 1;
    if (!lotto.includes(num)) lotto.push(num);
}

const sorting = lotto.sort((a, b) => a - b);
console.log(sorting);

【讨论】:

  • 虽然速度肯定较慢,但您也可以嵌套 for 循环以生成一个数字,然后将其与已存储在 lotto 中的每个数字进行比较;
  • @OnionSoap 基本上不是我的.includes 所做的吗?虽然它不是一个显式循环,但它实际上是在遍历数组,检查元素是否已经存在。
  • 是箭头按钮下的复选标记吗?对不起,我是新来的
【解决方案2】:

考虑到进程至少会运行一次,最好的解决方案是使用 do while 循环并验证该数字是否已存在于列表中。

const lotto = [];

do {
    const random = Math.floor(Math.random() * 69) + 1;
    if(!lotto.includes(random)) lotto.push(random);
} while(lotto.length < 5);

const sorting = lotto.sort((a, b) => a - b);
console.log(sorting);

【讨论】:

  • 非常感谢!我也会研究这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 2016-10-03
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多