对Number类型的数组排序是很简单的,对数组元素为对象的数组进行排序也很简单,可以写一个下面的公共方法

/** 两个参数: 参数1 是排序用的字段, 参数2 是:是否升序排序 true 为升序,false为降序*/
function compare (attr,rev) {
      // console.log(attr, rev)
      if(rev ==  undefined){
          rev = 1;
      }else{
          rev = (rev) ? 1 : -1;
      }
      return (a,b) => {
          a = a[attr];
          b = b[attr];
          if(a < b){
              return rev * -1;
          }
          if(a > b){
              return rev * 1;
          }
          return 0;
      }
   },

在代码中使用如下:

let list = [
    {id: 1, name: '章三'},
    {id: 10, name: 'wangwu'},
    {id: 2, name: 'list'}
]
// 用id 字段做升序排序
let d = list.sort(compare('id', true))
console.log(d) // [{id: 1, name: '章三'}, {id: 2, name: 'list'}, {id: 10, name: 'wangwu'}]

这样就可以对任意一个数组对象的任意一个字段进行排序啦

为什么没有使用更简单的写法。

data.sort((a,b)=>{ return a.date-b.date}

因为在项目中得到了这样一组数据,按照要求应该用这个数据的date属性排序。但是简单写法中,排序后,诡异的不成立。

let data = [
    {
        "date":"2022-07-09",
        "prob":"78.32"
    },
    {
        "date":"2022-07-08",
        "prob":"86.70",
    },
    {
        "date":"2022-07-07",
        "prob":"78.56"
    },
    {
        "date":"2022-07-06",
        "prob":"90.04"
    },
    {
        "date":"2022-07-05",
        "prob":"91.09"
    },
    {
        "date":"2022-07-04",
        "prob":"99.03"
    },
    {
        "date":"2022-07-03",
        "prob":"99.20"
    },
    {
        "date":"2022-07-02",
        "prob":"98.37"
    },
    {
        "date":"2022-07-01",
        "prob":"98.05"
    },
    {
        "date":"2022-06-30",
        "prob":"99.67"
    },
    {
        "date":"2022-06-29",
        "prob":"90.11"
    },
    {
        "date":"2022-06-28",
        "prob":"96.11"
    },
    {
        "date":"2022-07-10",
        "prob":"",
    },
    {
        "date":"2022-07-11",
        "prob":"",
    },
    {
        "date":"2022-07-12",
        "prob":"",
    }]

用简单的

console.log(data.sort((a,b)=>{ return a.date-b.date})

 

可以看到数组并没有按照我想要的从6月28日——7月11日进行排序。

用封装的复杂一些的方法排序:

console.log(data.sort(Tools.compare('date', true)), '复杂的写法')

可以看到打印结果,按照想要的结果进行了排序。 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐