【问题标题】:How can I generate 3 different (unique) numbers in javascript? [duplicate]如何在 javascript 中生成 3 个不同(唯一)的数字? [复制]
【发布时间】:2021-10-17 05:37:43
【问题描述】:

一个初学者的问题。 所以我用过

let myArray = [];

function randomNumbers(){
  for(let i = 0; i < 3; i++){
    if(Math.floor(Math.random()*10) !== myArray[i]){
      myArray.push(Math.floor(Math.random()*10));
    }
  }
}

randomNumbers()
console.log(myArray)

上面的代码按预期给了我 3 个随机数,但有时它给了我两次相同的数字,在极少数情况下,同样的数字 3 次。

【问题讨论】:

  • 您可以使用数字 0 到 9 创建数组,然后打乱该数组,并从该数组中获取前 3 个数字

标签: javascript arrays random numbers unique


【解决方案1】:

生成随机数时,总是有可能得到重复。但是,由于您特别需要 3 个随机数,我建议您检查您生成的每个数字是否已存在于数字数组中。

我可以看到您在某种程度上试图确保同一数字不会连续添加两次,但是当您调用 Math.random() 两次时,一次是在 if 中,一次是在您 push 时,实际上,您每次都会生成一个新数字。

尝试使用.includes() 来检查数组中是否已存在该数字。

类似这样的:

let myArray = [];

function randomNumbers() {
  for (let i = 0; i < 3; i++) {
    while (!myArray[i]) {
      let newRandomInt = Math.floor(Math.random() * 10);
      if (!myArray.includes(newRandomInt)) {
        myArray.push(newRandomInt)
      }
    }
  }
}

randomNumbers()
console.log(myArray)

【讨论】:

  • 非常感谢您的快速回复!将在 .includes() 进行检查 :)
  • 我不会打扰 for...循环。只要有while 检查myArray.length
  • @Andy 试过了,效果很好!感谢大家的帮助,我一直认为 for 循环总是比 while 或 do while 循环好,但我想不是
  • @Andy 好点,谢谢我会更新我的解决方案
【解决方案2】:

这里是数组生成不重复的数字demo

【讨论】:

  • 感谢您的回复,您向我展示的代码看起来不错,但我需要一些时间才能理解。祝你有美好的一天!
  • @AabB - 欢迎来到 Stack Overflow,在回答问题时,最好解释一下您的答案,以便对 OP 和未来的读者最有益(尽管您添加的代码 cmets 很好)。 Stack Overflow 还允许您将可运行的 sn-ps 嵌入到您的答案中,而无需让读者离开现场查看您的部分答案。制作方法如下:I've been told to create a "runnable" example with "Stack Snippets", how do I do that?
  • 好的,但它没有库
猜你喜欢
  • 2016-08-21
  • 2012-04-27
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2010-11-15
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多