2011-07-02 21 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 />';); 

希望這將有助於,

問候,

最大

相關問題