【问题标题】:Math.random() call number only one time [duplicate]Math.random() 呼叫号码只有一次[重复]
【发布时间】:2018-09-07 15:47:18
【问题描述】:

所以我的问题是如何调用随机数,但只有 10 次(当我们得到从 0 到 9 的数字时)使用不同的数字。 这是生成随机数的代码:

Math.floor(Math.random() * 10);

但是,例如,该代码可以两次获得数字 2。

示例输出:4、3、2、9、4、3、6、3;

如何得到这样的输出:5、3、6、4、1、9、8、2;

这是一个函数:fiddle: 但是,数字是随机的,可以重复和一遍又一遍。

那么如何在数字已经存在时替换数字,并在所有数字都使用时停止调用变量?!

【问题讨论】:

标签: javascript


【解决方案1】:

在我看来,您并不是真的想要一系列随机数,而是想要随机打乱一系列非随机数。以下是我的做法:

var nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for(var i = nums.length; i > 0; i--) {
    var temp = nums[i - 1];
    var swapIndex = Math.floor(Math.random() * i);
    nums[i - 1] = nums[swapIndex];
    nums[swapIndex] = temp;
}

【讨论】:

  • 我有 23 个 div。而且我只需要对它们进行 1 次动画处理,因为它们将进入 3d 透视图。不过还是谢谢。
  • @PiotrMirosz 这是您寻求的答案。什么(如果有的话)不适合你?
  • 我认为我无法使用您的答案。不适合我,但可能会为某人工作。
  • 我要提出另一个问题,当答案正确时我不会改变那个问题。
【解决方案2】:

你可以试试这样的

var limit = 10;
var results = []

function randomGenerator () {
    while (results.length < (limit -1)) {
      var generated = Math.ceil(Math.random() * limit);
      if (results.indexOf(generated) < 0) {
          results.push(generated)
      }
  }
}

randomGenerator()
alert(results)

【讨论】:

猜你喜欢
  • 2021-10-13
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多