1. 程式人生 > >js數組排序,支持正反排序以及多維度排序

js數組排序,支持正反排序以及多維度排序

數字 ems key isn 默認 clas param sna items

工作中遇到js數組排序問題,數組中存儲的都是對象,於是就百度了下,利用別人的代碼進行修改,最終完成可以倒序、反序,可以進行多維度排序的功能
源碼如下:

/** 
* js數組排序 支持數字和字符串
* @param params
* @param arrObj   obj     必填  數組對象
* @param keyName  string  必填  要排序的屬性名稱
* @param type     int     選填  默認type:0 正順  type:1反順
*/
function arrItemSort(arrObj,keyName,type) {
  //這裏如果 直接等於arrObj,相當於只是對對象的引用,改變排序會同時影響原有對象的排序,而通過arrObj.slice(0),
  //表示把對象復制給另一個對象,兩者間互不影響 
  var tempArrObj = arrObj.slice(0);
  var compare = function (keyName,type) {
      return function (obj1, obj2) {
          var val1 = obj1[keyName];
          var val2 = obj2[keyName];
          if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
              val1 = Number(val1);
              val2 = Number(val2);
              }
              //如果值為空的,放在最後       
              if (val1 == null && val2 == null) {
              return 0;
          } else if (val1 == null && val2!= null ) {
              return (type==1 ? -1 : 1);
          } else if (val2 == null && val1!= null ) {
              return (type==1 ? 1 : -1);
          }            
              //排序
          if (val1 < val2) {
              return (type==1 ? 1 : -1);
          } else if (val1 > val2) {
              return (type==1 ? -1 : 1);;
          } else {
              return 0;
          }            
      } 
  }
  return tempArrObj.sort(compare(keyName,type));
}

使用示例:

var temp = [
  {"name":"zjf","score":50,"age":10},
  {"name":"lyy","score":90,"age":5},
  {"name":"zzx","score":90,"age":12}
];
//根據age排序
var temp1 = arrItemSort(temp,"age",1);
console.log(temp1);

//先按年齡排序,再按分數排序 
var temp2 = arrItemSort(arrItemSort(temp,"age",1),"score",1);
console.log(temp2);

來源:jsfun.cn

js數組排序,支持正反排序以及多維度排序