2011-07-02 22 views
0

我:如何获得一个独特的随机整数在一定范围内的每个数字在该范围内的JavaScript?

function getRandomInt(min, max){ 
     return Math.floor(Math.random() * (max - min + 1)) + min; 
} 

但问题是我想要随机化的东西与元素人口在数组(所以他们不会在我填充的东西,每次出现在相同的顺序),所以我需要以确保返回的号码与其他号码相比是唯一的。

所以不是:

for(var i = 0; i < myArray.length; i++) { 

    } 

我:

var i; 
var count = 0; 
while(count < myArray.length){ 
    count++; 
    i = getRandomInt(0, myArray.length); // TODO ensure value is unique 

    // do stuff with myArray[i]; 
} 

回答

3

它看起来像,而不是独立的均匀随机数,你宁愿要一个随机置换集合{1,2​​, 3,...,N}。我认为有一个shuffle方法可以为你做到这一点。


按照要求,这里的代码示例:

function shuffle(array) { 
    var top = array.length; 
    while (top--) { 
     var current = Math.floor(Math.random() * top); 
     var tmp = array[current]; 
     array[current] = array[top - 1]; 
     array[top - 1] = tmp; 
    } 
    return array; 
} 
+0

你是对的!你可以包含代码,所以我可以标记为答案:function shuffle(array)var tmp,current,top = array.length; (top)while( - top){current_ Math.floor(Math.random()*(top + 1)); tmp = array [current]; array [current] = array [top]; array [top] = tmp; } return array; } – markmnl

2

有时以随机的东西(说张牌)的最佳方式是拉出来之前,不推诿,但它洗牌作为你把它拉出来。

假设您有:在的结束

function drawNumber() { 
    // set index to draw from 
    var swap, 
     drawIndex = Math.floor(Math.random() * (endNum+ 1)); 

    // swap the values at the drawn index and at the "end" of the deck 
    swap = array[drawIndex]; 
    array[drawIndex] = array[endNum]; 
    array[endNum] = swap; 

    endNum--; 
} 

因为我递减结束对抗绘制的项目将被“丢弃”:

var i, 
    endNum = 51, 
    array = new Array(52); 
for(i = 0; i <= endNum; i++) { 
    array[i] = i; 
} 

然后,你可以写这样的功能堆栈和randomize函数将只处理从0结束为可行的项目。

这是我用过的一种常见模式,自从我上次用它在c#中编写一个简单的纸牌游戏后,我可能会错误地将它引入到js中。实际上我只是看着它,我有int ____而不是var ____ lol

1

您可以将函数传递给Array.Sort方法。如果这个函数返回一个随机数大于或小于零的值,那么你的数组将被随机排序。

myarray.sort(function() {return 0.5 - Math.random()}) 

应该为你做伎俩,而不必担心每个随机数是否是唯一的。

没有循环,很简单。

2

如果我理解的很好,你需要一个整数数组,但随机排序。

一种方法做它被描述here

首先创建一个rand函数:

function randOrd(){ 
return (Math.round(Math.random())-0.5); } 

然后,随机您的阵列。下面的例子演示了如何:

anyArray = new Array('1','2','3','4','5'); 
anyArray.sort(randOrd); 
document.write('Random : ' + anyArray + '<br />';); 

希望这将有助于,

问候,

最大

相关问题