回答
您有幾個選擇。
首先,你可以使用stupidely天真分揀機...
arr = arr.sort(function() {
return Math.random() - .5
});
這是快速和骯髒,但往往被認爲是不好的做法。
該最好方式隨機排序Array
是與Fisher-Yates shuffle。
var newArr = [];
while (arr.length) {
var randomIndex = Math.floor(Math.random() * arr.length),
element = arr.splice(randomIndex, 1)
newArr.push(element[0]);
}
你爲什麼給我一個「經常被認爲是壞習慣」而不是Fisher-Yates shuffle的jsfiddle鏈接? –
@Adam現在就寫Fisher Yates,不得不查看它:) – alex
沒關係。我將使用http://stackoverflow.com/questions/962802/is-it-correct-to-use-javascript-array-sort-method-for-shuffling/#answer-962890 –
這是我使用的一個。它給每個元素一個隨機數,按這些隨機數對數組排序(移動實數值),然後再次去除隨機數。它似乎分佈均勻,但我還沒有數學證明。
arr = arr.map(function(v) {
return [v, Math.random()];
}).sort(function(a, b) {
return a[1] - b[1];
}).map(function(v) {
return v[0];
});
http://jsfiddle.net/XQRFt/ - 測試結果(可能會慢)
這是我的解決方案洗牌數組:
function shuffle(array) {
var resultArray = new Array();
for(i=0;i<array.length;i++) {
var randomEle = Math.floor(Math.random()*array.length);
resultArray.push(array[randomEle]);
array.splice(randomEle,1);
}
resultArray = resultArray.concat(array);
return resultArray;
}
這是一個洗牌的比賽與其他2
比較我的方法我已將@ alex的[@](http://stackoverflow.com/a/7309413/727074)的Fisher-Yates shuffle添加到您的jsPerf ['contest'](http://jsperf.com/shuffle-競賽/ 3)。這是最快的 –
- 1. 無效的陣列洗牌器
- 2. 洗牌陣列的最佳算法
- 3. 洗牌陣列javascript
- 4. 陣列洗牌java
- 5. Ember.js洗牌陣列
- 6. 列的隨機洗牌
- 7. setImageResource洗牌卡陣列
- 8. 陣列洗牌不工作
- 9. 洗牌出從陣列
- 10. 洗牌陣列在PHP
- 11. 隨機洗牌列表
- 12. 洗牌單元陣列(Matlab的)
- 13. 洗牌多個相關的陣列
- 14. 洗牌NumPy的陣列沿給定軸
- 15. 可預測的Javascript陣列洗牌
- 16. 測試卡牌洗牌機
- 17. 在矩陣的一個維度中洗牌(有效)?
- 18. 隨機洗牌列除第一列
- 19. 洗牌列表中隨機的Java
- 20. 迭代洗牌[0..N),而不陣列
- 21. 洗牌陣列屬性在JavaScript
- 22. 如何洗牌陣列問題?
- 23. 洗牌陣列重複一個值
- 24. 二維陣列洗牌指針幫助
- 25. 洗牌陣列(賽格故障)
- 26. PHP陣列洗牌,保持獨特
- 27. PHP陣列洗牌HTML鏈接
- 28. 在Android中洗牌陣列圖像
- 29. 洗牌的隨機化
- 30. 隨機洗牌<table>列
看一看[here](http:// stackoverflo w.com/questions/962802/is-it-correct-to-use-javascript-array-sort-method-for-shuffling)。 –
http://www.hardcode.nl/subcategory_1/article_317-array-shuffle-function這有一些微不足道的代碼 – doNotCheckMyBlog
http://sedition.com/perl/javascript-fy.html – sanmai