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);
//根据score排序,score相同时根据age排序
var temp2 = arrItemSort(arrItemSort(temp,"age",1),"score",1);
console.log(temp2);

来源:jsfun.cn

 

 

转载于:https://my.oschina.net/u/192631/blog/1637796

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值