js打乱数组排序
一直使用的办法是网上百度来的,代码如下:
var arr = [1, 2, 3, 4] arr.sort(randSort) function randSort(a, b) { return Math.random()>0.5?-1:1 }
问题是,使用过程中经常发现部分元素并没有被打乱,也就是说经常出现以下情况
[1, 2, 4, 3]
后来重新想了下,感觉可能排序有问题,在网上找到了新的办法,代码如下:
var arr=[1, 2, 3, 4] shuffle(arr)
function shuffle (arr) { var i = arr.length, t, j while (i) { j = Math.floor(Math.random() * i--) t = arr[i] arr[i] = arr[j] arr[j] = t } }
ES6写法如下:
function shuffle(arr) { let i = arr.length while (i) { let j = Math.floor(Math.random() * i--) [arr[j], arr[i]] = [arr[i], arr[j]] } }