javascript - 两个限制之间的javascript中的随机非重复数字生成

标签 javascript

除了数组拼接之外,是否有任何方法可以用来在两个数字之间生成一个随机数而无需重复,直到生成这两个数字之间的所有数字?洗牌技术或除拼接之外的任何其他阵列方法都将非常有用。

最佳答案

首先我们使用 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

为了确保我们有一个由 startend 范围内的数字填充的数组,我们使用一个简单的循环来创建我们的种子。

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/

相关文章:

javascript - 我的 table 有一个额外的单元格

javascript - 在新的 Javascript 函数中使用已创建的函数

javascript - 动态添加下拉列表

javascript - 使用 Parse Cloud 代码模块通过 SendGrid 发送附件

javascript - 如何使用二级 div 向下移动一个 div 元素?

javascript - JavaScript 中的 Python Pandas 等价物

javascript - javascript中的RSA加密和Java中的解密

javascript - 将html文件中的内容导入到div中

javascript - 试图让标题贴在 DIV 的顶部并让内容在其下方滚动

javascript - 如何在 JavaScript 中使用 for 循环/单击事件添加多个按钮?