sort() 方法用于對數組的元素進行排序。
文法:
參數:
sortby 可選。規定排序順序。必須是函數。
傳回值:
對數組的引用。請注意,數組在原數組上進行排序,不生成副本。
下面的排序都用到了sort,分為幾種情況來介紹
1、普通字元串數組
直接調用sort就可以實作排序
var arr = ["張三", "李四", "王麻子", "小二", "陳晨", "陳陽"]
arr.sort()
結果如下:
2、普通數值數組
如果直接使用sort()排序會有問題,你會發現5排在最後了,如圖:
這是因為sortby這個參數省略的話,那麼數組中的元素将按照ASCII字元順序進行排序,而5的ASCII比較大,就會出現這種情況
這裡我們可以使用sortby參數實作排序
function sortNumber(a,b)
{
return a - b
}
arr.sort(sortNumber)
結果:
說明:
sortNumber對傳入的一對值進行比較,然後傳回的的值為:小于0,大于0,等于0;(大于0交換位置,反之則不)
- 當小于0時,說明b>a,故b的排序靠後(即不變).
- 當大于0時,說明a>b,故a的排序靠後.
- 當等于0時,說明a=b,故不改變排序.
如果對數值數組的值進行降序排序。那麼隻要把傳回的值改為 b-a 即可
json數組
var arr = [{
name: "張三",
age: 20
}, {
name: "李四",
age: 25
}, {
name: "王麻子",
age: 32
}, {
name: "小二",
age: 18
}, {
name: "陳晨",
age: 27
}, {
name: "陳陽",
age: 20
}]
3、json數組按數值字段排序
arr.sort(function(a,b){
return a.age-b.age
})
利用sortby參數去判斷一對值得age大小,原理同普通數值數組,結果如下:
4、json數組按字元串字段排序
字元串不能根據a-b來判斷大小了,這裡用到了localeCompare
arr.sort(function(a,b){
return a.name.localeCompare(b.name)
})
結果如下:
localeCompare的用法
localeCompare是用本地特定的順序來比較兩個字元串。
文法:
參數:
target 要以本地特定的順序與 stringObject 進行比較的字元串。
傳回值:
說明比較結果的數字。如果 stringObject 小于 target,則 localeCompare() 傳回小于 0 的數。如果 stringObject 大于 target,則該方法傳回大于 0 的數。如果兩個字元串相等,或根據本地排序規則沒有差別,該方法傳回 0。