天天看點

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

sort() 方法用于對數組的元素進行排序。

文法:

參數:

sortby 可選。規定排序順序。必須是函數。

傳回值:

對數組的引用。請注意,數組在原數組上進行排序,不生成副本。

下面的排序都用到了sort,分為幾種情況來介紹

1、普通字元串數組

直接調用sort就可以實作排序

var arr = ["張三", "李四", "王麻子", "小二", "陳晨", "陳陽"]

arr.sort()
           

結果如下:

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

2、普通數值數組

如果直接使用sort()排序會有問題,你會發現5排在最後了,如圖:

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

這是因為sortby這個參數省略的話,那麼數組中的元素将按照ASCII字元順序進行排序,而5的ASCII比較大,就會出現這種情況

這裡我們可以使用sortby參數實作排序

function sortNumber(a,b)
{
    return a - b
}
arr.sort(sortNumber)
           

結果:

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

說明:

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大小,原理同普通數值數組,結果如下:

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

4、json數組按字元串字段排序

字元串不能根據a-b來判斷大小了,這裡用到了localeCompare

arr.sort(function(a,b){
  return a.name.localeCompare(b.name)
})
           

結果如下:

Jquery對普通數組和JSON數組的排序(包括字元串和數值)

localeCompare的用法

localeCompare是用本地特定的順序來比較兩個字元串。

文法:

參數:

target 要以本地特定的順序與 stringObject 進行比較的字元串。

傳回值:

說明比較結果的數字。如果 stringObject 小于 target,則 localeCompare() 傳回小于 0 的數。如果 stringObject 大于 target,則該方法傳回大于 0 的數。如果兩個字元串相等,或根據本地排序規則沒有差別,該方法傳回 0。