語法: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。