剖析Javascript中sort()使用方法,以及重寫sort()里的排序方法,實現自定義排序


語法:arrayObject.sort([compareFunction]);參數compareFunction可選。規定排序順序,必須是函數。

sort() 方法用於對數組的元素進行排序,並返回數組。默認排序順序是根據字符串Unicode碼點

// compare函數的基本操作
function compare(a, b){
    if (根據某種排序標准a小於b) {
       return -1
    }
   if (根據某種排序標准a大於b) {
       return 1 }
   // a === b
   return 0
}

下面來看一個例子:

var students = [
    {age: 18, name: "tom"},
    {age: 20, name: "jack"},
    {age: 19, name: "bob"}
]
// 現在對學生的姓名進行排序
students.sort(
    (a, b) => {
        return (a.name < b.name) ? -1 : (a.name > b.name) ? 1 : 0
    }
)

結果如下↓

把名字換成年齡

// 對學生按年齡進行排序
students.sort(
    (a, b) => {
        return (a.age < b.age) ? -1 : (a.age > b.age) ? 1 : 0
    }
)

這兩種排序就等於用了同樣的代碼,那我們可不可以封裝成一個統一的方法呢

來試一下↓

// 統一封裝
const sortBy = (key) => {
    return (a, b) => {
        var result = (a[key] < b[key]) ? -1 : (a[key] > b[key]) ? 1 : 0
        return result
    }
}

sortBy()函數接收一個參數並返回一個接收兩個參數的新函數====(這里就是閉包的強大之處)

下面我們就可以這樣使用sort了

students.sort(sortBy("name"))

看看結果↓

 

和上面在()里寫方法的結果一樣啊    

這樣以后我們不管students每條數據有多少個key,我們想按照哪個key排序就輸入那個key就可以了

 It’s great!

 

--------------------------------------------------------------------------------------

V8 引擎 sort 函數只給出了兩種排序 InsertionSort 和 QuickSort,數量小於10的數組使用 InsertionSort,比10大的數組則使用 QuickSort。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM