javascript 5从0到20的随机非重复整数

Har*_*rry 5 javascript random

从0到20生成5个随机非重复整数的最佳方法是什么?

我在想,使用Math.random和floor,循环5次,检查重复,如果重复,再次随机.

你的方式是什么?

Dar*_*rov 7

您可以生成一个从0到20的数字数组,将其洗牌并获取结果数组的前5个元素.


T.J*_*der 0

编辑:一个更好的解决方案,这个或其他在这里发布的解决方案可以这个问题的答案中找到,当它在 2008 年被问到时。总结:生成一个数组(正如达林在下面的答案中建议的那样)并使用Knuth-对其进行洗牌耶茨-费舍尔洗牌不要使用天真的洗牌,而使用已知效果良好的洗牌。


我就是这么做的,是的。我可能会使用一个对象来跟踪我已经拥有的整数,因为这很方便。例如:

var ints = {};
Run Code Online (Sandbox Code Playgroud)

然后,一旦您创建了一个新的随机数,请检查它并可能保留它:

if (!ints[number]) {
    // It's a keeper
    ints[number] = true;
    results.push(number);
}
Run Code Online (Sandbox Code Playgroud)