首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中两个限制之间的随机非重复数生成

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

Stack Overflow用户
提问于 2013-05-24 13:37:50
回答 3查看 2.2K关注 0票数 4

除了数组拼接之外,有没有什么方法可以用来生成两个数之间的随机数,而不需要重复,直到这两个数之间的所有数都生成了?除了拼接之外,混洗技术或任何其他数组方法都会非常有用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-24 13:46:08

首先,我们使用fisherYates实现(credit goes to @ChristopheD)并扩展数组原型,使其具有可用的随机函数

代码语言:javascript
复制
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方法,我们从种子中获取一个数字,直到它为空

代码语言:javascript
复制
numbers.pop(); //returns a number

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

代码语言:javascript
复制
var start = 1;
var end = 5;
var numbers = new Array();
for (var i = start; i <= end; i++) {
    numbers.push(i);
}

这是一个关于jsfiddle的示例

更新:让fisherYates算法更有效地混洗

票数 2
EN

Stack Overflow用户

发布于 2016-11-22 17:04:15

在处理较小的数组时,我通常会按随机顺序对数组进行排序:

代码语言:javascript
复制
yourArray.sort(function() { return 0.5 - Math.random() });
票数 0
EN

Stack Overflow用户

发布于 2013-05-24 13:52:53

尝试此http://jsbin.com/imukuh/1/edit

代码语言:javascript
复制
function randRange(min, max) {
  var result = [];
  for (var i=min; i<=max; i++) result.push(i);
  return result.map(function(v){ return [Math.random(), v] })
    .sort().map(function(v){ return v[1] });
}

console.log(randRange(1,5));
// [4, 3, 1, 5, 2]
// [3, 5, 2, 4, 1]
// [1, 5, 2, 3, 4]
// [3, 2, 5, 1, 4]
// ...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16728297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档