1. 程式人生 > >基於JavaScript實現Json資料根據某個欄位(json中的某個屬性)進行排序

基於JavaScript實現Json資料根據某個欄位(json中的某個屬性)進行排序

在實際開發中,有一種需求是當前臺獲取後臺傳過來的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陣列 */ functionjsonSort(array, field, reverse) { //陣列長度小於2 或 沒有指定排序欄位 或 不是json格式資料
if(array.length < 2 || !field ||typeof array[0] !=="object") returnarray; //數字型別排序 if(typeofarray[0][field] === "number") { array.sort(function(x, y) {return x[field] - y[field]}); } //字串型別排序 if(typeofarray[0][field] === "string") { array.sort(function(x, y) {return x[field].localeCompare(y[field])}); }
//倒序 if(reverse) { array.reverse(); } returnarray; }

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) { varordAlpah = (order == 'asc') ?'>' : '<'; varsortFun = new Function('a', 'b', 'return a.'+ sortBy + ordAlpah + 'b.'+ sortBy + '?1:-1'); returnsortFun; } alert(JSON.stringify(array));