如何随机产生,而不在JavaScript中的重复号码?(How to randomly genera

2019-07-22 20:27发布

我想生成0-4随机使用javascript之间的每个数量和每个数只能出现一次。 所以我写的代码:

for(var l=0; l<5; l++) {
    var randomNumber = Math.floor(Math.random()*5);  
    alert(randomNumber)
}

但这个代码被重复的值。 请帮忙。

Answer 1:

生成一系列的数字:

var numbers = [1, 2, 3, 4];

然后洗牌它:

function shuffle(o) {
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

var random = shuffle(numbers);


Answer 2:

还有一个办法做到这一点:

for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) {
    var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0];
    console.log(random);
}

不知道如果它甚至有可能使之更加紧凑。

测试: http://jsfiddle.net/2m3mS/1/

这里是嵌入演示:

 $('button').click(function() { $('.output').empty(); for (var a = [0, 1, 2, 3, 4], i = a.length; i--; ) { var random = a.splice(Math.floor(Math.random() * (i + 1)), 1)[0]; $('.output').append('<span>' + random + '</span>'); } }).click(); 
 .output span { display: inline-block; background: #DDD; padding: 5px; margin: 5px; width: 20px; height: 20px; text-align: center; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="output"></div> <button>Run</button> 



Answer 3:

阿迪尔和Minko给出的答案有一个重大的问题(虽然Minko它至少限制在小的组数字):他们对同样数量一遍又一遍。

在这个意义上,有较好的方法是创建包含可能值的阵列,洗牌它,然后只是弹出关闭它的元件。 这将需要洗牌阵列的复杂性,但它会摆脱上述问题的。

var elements = [1, 2, 3, 4];
elements.shuffle(); // not a standard Javascript function, needs to be implemented

while( elements.length > 0 ) {
    console.log( elements.pop() );
}


Answer 4:

感谢所有您的帮助。 但也许另一种方式来产生在给定的最大范围内的随机数可以按下面来实现。

function generateRan(){
    var max = 20;
    var random = [];
    for(var i = 0;i<max ; i++){
        var temp = Math.floor(Math.random()*max);
        if(random.indexOf(temp) == -1){
            random.push(temp);
        }
        else
         i--;
    }
    console.log(random)
}

generateRan();


Answer 5:

If the range of random numbers is not very large you can use this:

var exists = [],
    randomNumber,
    max = 5;
for(var l = 0; l < max; l++) {
   do {
       randomNumber = Math.floor(Math.random() * max);  
   } while (exists[randomNumber]);
   exists[randomNumber] = true;
   alert(randomNumber)
}

DEMO



Answer 6:

产生随机数没有任何范围

function getuid() {
        function s4() {
            return Math.floor((1 + Math.random()) * 0x10000)

        }
          return s4() + s4();
 }
 var uid = getuid();
 alert(uid)


Answer 7:

var randomNumber = [];

for (var i = 0; i < 16; i++) {
    var number = Math.floor(Math.random() * 4);
    var genNumber = randomNumber.indexOf(number);
    if (genNumber === -1) {
        randomNumber.push(number);
    }
}


文章来源: How to randomly generate numbers without repetition in javascript?