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]]
    } 
}

 

posted @ 2018-09-27 14:04  雾以泪聚rx  阅读(1603)  评论(0编辑  收藏  举报