zoukankan      html  css  js  c++  java
  • js数组排序,支持正反排序以及多维度排序

    工作中遇到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

  • 相关阅读:
    call()和apply( )
    String.prototype.replace( )
    Global对象和浏览器的window对象
    ros qt 項目增加新的线程
    ubuntu18.04 在QT中添加ros环境搭建 亲测可用
    ubuntu18.04系统下安装Nvidia驱动 + cuda10.0 + cudnn7
    【ROS学习】发布自定义数据结构的话题
    Autoware快速使用资料
    TX2-ubuntu无外接显示器远程桌面时分辨率过低
    Jetson TX2 安装 远程桌面软件 NoMachine
  • 原文地址:https://www.cnblogs.com/jsfuns/p/8541579.html
Copyright © 2011-2022 走看看