生成0到'x'之间的唯一随机数(整数)

ben*_*e89 47 javascript random

我需要生成一组唯一(无重复)整数,并且在0和给定数字之间.

那是:

var limit = 10;
var amount = 3;
Run Code Online (Sandbox Code Playgroud)

如何使用Javascript生成1到10之间的3个唯一数字?

Rob*_*b W 70

使用基本Math方法:

  • Math.random() 返回0到1之间的随机数(包括0,不包括1).
  • 将此数字乘以所需的最大数字(例如10)
  • 围绕这个数字

    Math.floor(Math.random()*10) + 1
    
    Run Code Online (Sandbox Code Playgroud)

例:

//Example, including customisable intervals [lower_bound, upper_bound)
var limit = 10,
    amount = 3,
    lower_bound = 1,
    upper_bound = 10,
    unique_random_numbers = [];

if (amount > limit) limit = amount; //Infinite loop if you want more unique
                                    //Natural numbers than exist in a
                                    // given range
while (unique_random_numbers.length < limit) {
    var random_number = Math.floor(Math.random()*(upper_bound - lower_bound) + lower_bound);
    if (unique_random_numbers.indexOf(random_number) == -1) { 
        // Yay! new random number
        unique_random_numbers.push( random_number );
    }
}
// unique_random_numbers is an array containing 3 unique numbers in the given range
Run Code Online (Sandbox Code Playgroud)

  • 答案是错的.不要使用round() - 使用floor()或ceil(),否则,您的结果将不会均匀分布.例如,如果你想要一个介于0和3之间的随机整数,并且你使用round(),你将比0和3更经常得到1和2,因为有更多可能的随机值将舍入为1和2,因为round()可以向上或向下舍入.使用地板或细胞力浮子总是朝同一方向旋转,从而产生更多的分布结果. (14认同)

Lla*_*don 19

Math.floor(Math.random() * (limit+1))
Run Code Online (Sandbox Code Playgroud)

Math.random()生成一个介于0和1之间的浮点数,Math.floor()将其向下舍入为整数.

通过将其乘以数字,可以有效地使范围为0..number-1.如果您希望在num1到num2的范围内生成它,请执行以下操作:

Math.floor(Math.random() * (num2-num1 + 1) + num1)
Run Code Online (Sandbox Code Playgroud)

要生成更多数字,只需使用for循环并将结果放入数组或直接将其写入文档.


Bak*_*dan 6

function generateRange(pCount, pMin, pMax) {
    min = pMin < pMax ? pMin : pMax;
    max = pMax > pMin ? pMax : pMin;
    var resultArr = [], randNumber;
    while ( pCount > 0) {
        randNumber = Math.round(min + Math.random() * (max - min));
        if (resultArr.indexOf(randNumber) == -1) {
            resultArr.push(randNumber);
            pCount--;
        }
    }
    return resultArr;
}
Run Code Online (Sandbox Code Playgroud)

根据所需的范围,返回整数的方法可以更改为:ceil(a,b),round [a,b],floor [a,b),for(a,b)是添加1到min的问题地板.