js json陣列按某一欄位排序
一.首先給大家介紹js中內建的 sort() 方法
此方法預設是按字母順序對陣列中的元素進行排序的,說得更精確點,是按照字元編碼的順序進行排序。
看如下例子:
當陣列中元素為 數字型別 時,排序結果與我們設想的完全不同,因為預設是按照字元編碼的順序進行排序的。
解決方案:sort() 方法接收一個可選引數(此引數必須是函式),我們可以自己定義排序規則,如下圖
二. 對 json 排序的具體實現
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/*
*
@description 根據某個欄位實現對json陣列的排序
*
@param array 要排序的json陣列物件
*
@param field 排序欄位(此引數必須為字串)
*
@param reverse 是否倒序(預設為false)
*
@return array 返回排序後的json陣列
*/
function
jsonSort(array, field, reverse) {
//陣列長度小於2
或 沒有指定排序欄位 或 不是json格式資料
if (array.length
< 2 || !field || typeof
array[0] !== "object" )
return
array;
//數字型別排序
if ( typeof
array[0][field] === "number" )
{
array.sort( function (x,
y) { return
x[field] - y[field]});
}
//字串型別排序
if ( typeof
array[0][field] === "string" )
{
array.sort( function (x,
y) { return
x[field].localeCompare(y[field])});
}
//倒序
if (reverse)
{ array.reverse();
}
return
array;
}
|
PS:JS中:json物件陣列按物件屬性排序
?1 2 3 4 5 6 7 8 9 10 11 12 13 |
var
array = [
{name:
'a' ,
phone: 1},
{name:
'b' ,
phone: 5},
{name:
'd' ,
phone: 3},
{name:
'c' ,
phone: 4}
]
array.sort(getSortFun( 'desc' ,
'phone' ));
function
getSortFun(order, sortBy) {
var
ordAlpah = (order == 'asc' )
?
|