除了数组拼接之外,是否有任何方法可以用来在两个数字之间生成一个随机数而无需重复,直到生成这两个数字之间的所有数字?洗牌技术或除拼接之外的任何其他阵列方法都将非常有用。
最佳答案
首先我们使用 fisherYates 实现 (credit goes to @ChristopheD)并扩展数组原型(prototype)以提供随机播放功能
function arrayShuffle () {
var i = this.length, j, temp;
if ( i === 0 ) return false;
while ( --i ) {
j = Math.floor( Math.random() * ( i + 1 ) );
temp = this[i];
this[i] = this[j];
this[j] = temp;
}
}
Array.prototype.shuffle =arrayShuffle;
var numbers = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
numbers.shuffle();
现在使用 pop
方法,我们从种子中获取一个数字,直到它为空
numbers.pop(); //returns a number
为了确保我们有一个由 start
和 end
范围内的数字填充的数组,我们使用一个简单的循环来创建我们的种子。
var start = 1;
var end = 5;
var numbers = new Array();
for (var i = start; i <= end; i++) {
numbers.push(i);
}
这是关于 jsfiddle 的样本
更新:使用 fisherYates 算法以提高洗牌效率
关于javascript - 两个限制之间的javascript中的随机非重复数字生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728297/