js實現的json格式資料排序程式碼例項

admin發表於2017-03-23

本章節介紹一下如何實現json格式資料的排序功能,這個排序功能在很多較為複雜的效果中都有使用,比如table表格中資料排序功能也可能會用到,下面就通過程式碼例項介紹一下如何實現json格式資料的排序功能。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var sortBy=function (filed,rev,primer){
  rev = (rev) ? -1 : 1;
  return function (a, b) {
    a = a[filed];
    b = b[filed];
    if (typeof (primer) != 'undefined') {
      a = primer(a);
      b = primer(b);
    }
    if (a < b) { return rev * -1; }
    if (a > b) { return rev * 1; }
    return 1;
  }
};
var obj=[
  {b: '3', c: 'c'}, 
  {b: '1', c: 'a'},
  {b: '2', c: 'b'}
];
obj.sort(sortBy('b',false,parseInt));
console.log(obj);

以上程式碼實現了我們的要求,可以實現簡單的排序功能,下面介紹一下它的實現過程。

一.實現原理:

由於json格式物件也就是物件直接量是作為陣列的元素存在的,所以對json格式物件的排序總體上是使用的sort()方法,而在確定sort()函式排序規則的時候就要根據我們所確定的一些條件,比如物件的鍵b的值的大小,是否反轉順序等,具體請看程式碼註釋。

二.程式碼註釋:

1.var sortBy=function (filed,rev,primer){},此函式可以返回一個函式物件用以指定sort()函式排序規則,第一個用來規定比較的是json物件的哪一鍵的值,第二個引數用來規定是否飯反轉順序,如果為true則反轉比較順序,也就是從小打排序,第三個引數規定以比較字串比較還是以數字型別進行比較。

2.rev = (rev) ? -1 : 1,將rev設定為1或者-1,要根據rev傳遞的引數值,三元運算子,具體可以參閱三元運算子用法詳解一章節 。

3.return function (a, b){},返回一個函式物件,用作sort()函式的引數,具體可以參閱javascript sort()函式用法詳解一章節。

4.a = a[filed],函式逇引數a和b是陣列中的前後兩個json格式物件,這個就是獲取物件a的物件鍵值。

5.if (typeof (primer) != 'undefined') { a = primer(a);b = primer(b);},判斷函式是否傳遞第三個引數,因為如果引數沒有傳遞,那麼預設值是undefined,當傳遞此引數的時候,就會進行相應的型別轉換。

相關文章