基於JavaScript實現Json資料根據某個欄位(json中的某個屬性)進行排序
阿新 • • 發佈:2019-02-09
在實際開發中,有一種需求是當前臺獲取後臺傳過來的json資料時,比如,需要按照json資料中查詢的某個屬性(某個欄位)進行排序,好比,我需要顯示某個事項要按照第1階段、第2階段等等以此類推的顯示。我的json中查詢到資料對應的階段和階段內容,那麼如果我不進行任何處理,那麼顯示的時候,遍歷josn資料顯示,資料顯示出來就不能按照順序進行顯示,所以我們必須對json資料進行一個排序後再進行輸出。其中,js中自帶的sort()方法可以對js陣列進行排序。但它的排序是按照字元編碼排序的,所以一般我們排序都是按照json中的某個數字型別的欄位進行排序。所以我們需要重寫sort函式。
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;
}
|
2、json物件陣列按物件屬性(數字型別)排序
遍歷將json物件,將其中的每個物件push到一個js陣列物件中。
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'
) ?
'>'
:
'<'
;
var
sortFun =
new
Function(
'a'
,
'b'
,
'return a.'
+ sortBy + ordAlpah +
'b.'
+ sortBy +
'?1:-1'
);
return
sortFun;
}
alert(JSON.stringify(array));