0
我想用javascript生成50個不重複的隨機數,數字範圍在1到50之間。我可以認識到它嗎?50個數字存儲在一個數組中。javascript生成50個不重複的隨機數
我想用javascript生成50個不重複的隨機數,數字範圍在1到50之間。我可以認識到它嗎?50個數字存儲在一個數組中。javascript生成50個不重複的隨機數
首先生成一個有序列表:
var i, arr = [];
for (i = 0; i < 50; i++) {
arr[i] = i + 1;
}
然後將它洗。
arr.sort(function() {
return Math.random() - 0.5;
});
我測試了上述方法,它表現良好。但是,ECMAScript規範並不要求Array.sort
以這種方式實現,即該方法會生成一個真正隨機的列表 - 因此雖然它現在可以運行,但結果可能會在沒有警告的情況下發生變化。下面是Fisher-Yates shuffle的一個實現,它不僅保證產生一個合理的隨機分佈,而且比被劫持的分類更快。
function shuffle(array) {
var p, n, tmp;
for (p = array.length; p;) {
n = Math.random() * p-- | 0;
tmp = array[n];
array[n] = array[p];
array[p] = tmp;
}
}
你的代碼中有一個小錯誤,因爲我從1.使用數組的'push'方法,而不是開始元素添加進去。 http://jsfiddle.net/KUfcf/ – ShankarSangoli
謝謝,修正(實際評論之前)。 'push'比直接賦值稍慢,所以(在這種情況下)我認爲使用'[i]'更好。 –
您提供的解決方案完美工作。感謝 – LiveJin