2012-05-22 53 views

回答

4

首先生成一個有序列表:

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; 
    } 
} 
+0

你的代碼中有一個小錯誤,因爲我從1.使用數組的'push'方法,而不是開始元素添加進去。 http://jsfiddle.net/KUfcf/ – ShankarSangoli

+0

謝謝,修正(實際評論之前)。 'push'比直接賦值稍慢,所以(在這種情況下)我認爲使用'[i]'更好。 –

+0

您提供的解決方案完美工作。感謝 – LiveJin