如何將一個 JavaScript 數(shù)組打亂順序

當(dāng)我們想將現(xiàn)有的數(shù)組打亂順序,有兩個方法:

1. Array.prototype.sort()

數(shù)組的sort()方法

用原地算法對數(shù)組的元素進行排序,并返回數(shù)組。默認排序順序是在將元素轉(zhuǎn)換為字符串,然后比較它們的UTF-16代碼單元值序列時構(gòu)建的。

var arr = [1,2,3,4,5,'hello','bye',6,8,'yes'];
arr.sort(function(){
    return Math.random()-0.5
})

sort()方法如果指定了一個函數(shù),那么會按照這個函數(shù)的返回值來對數(shù)組進行排序:

  • 如果返回值大于0,那么被比較的相鄰兩個數(shù)a和b,a會排到b的后面,
  • 如果返回值等于0,那么a和b的位置不變
  • 如果返回值小于0,那么a會排到b的前面。

但是,用sort()方法不能實現(xiàn)真正意義上的完全亂序(如何將一個 JavaScript 數(shù)組打亂順序? - Lucas HC的回答 - 知乎),要實現(xiàn)完全亂序,需要用到 Fisher–Yates shuffle 洗牌算法。

2. Fisher–Yates shuffle 洗牌算法

該方法就是每次在數(shù)組中隨機產(chǎn)生一個位置,依次將數(shù)組中的每一項與該次產(chǎn)生的隨機位置上的元素交換位置:

function shuffle(arr){
    var l = arr.length
    var index, temp
    while(l>0){
        index = Math.floor(Math.random()*l)
        temp = arr[l-1]
        arr[l-1] = arr[index]
        arr[index] = temp
        l--
    }
    return arr
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容