如何防止在Math.random()javascript中重复数字

时间:2018-01-24 12:59:16

标签: javascript

我在HTML文件中有以下代码(见下文),它生成100000-999999之间的随机数(它工作正常)但我想确保它不重复自身。如何修改它或添加代码来执行此操作?

							
	
var randomnumber = Math.floor(Math.random()*999999) + 100000
document.write(randomnumber)
							

2 个答案:

答案 0 :(得分:3)

您可以跟踪已使用的所有号码:

var numbers = [];
var randomnumber;
do {
    randomnumber= Math.floor(Math.random()*999999) + 100000;
} while (numbers.includes(randomnumber));
numbers.push(randomnumber);     
document.write(randomnumber)

如果ES6出现问题(array.prototype.includes),您可以使用array.prototype.indexOf

// ...
do {
    randomnumber= Math.floor(Math.random()*999999) + 100000;
} while (numbers.indexOf(randomnumber) !== -1);
// ...

答案 1 :(得分:-3)

它重复的概率很低。你可以假设它不会重复。

但是,如果重复对您至关重要,您可以保留所有生成值的缓存,然后在生成新值时随时检查它。

对于这种情况,你可以使用这样的东西。

var usedNumbers = [];  // will store all the generated random numbers
var currNumber;
do {
    currNumber= Math.floor(Math.random()*999999) + 100000;
} while (usedNumbers.includes(currNumber));
usedNumbers.push(currNumber); // add the random number to the list of used numbers    
document.write(currNumber);