一个复杂点的数组sort排序

前言:这是一个实际项目的例子,当时自己脑子有点转不过来(前端写复杂的排序的机会极少,感觉缺少那种思维)。后来给后台同学讲了下,直接就说少写了一个条件......

数组源:

const dataSessionArr = [
    {date: "2019-05-06", sessionKey: 1}
    {date: "2019-05-13", sessionKey: 2}
    {date: "2019-05-20", sessionKey: 3}
    {date: "2019-05-27", sessionKey: 4}
    {date: "2019-06-03", sessionKey: 5}
    {date: "2019-06-10", sessionKey: 6}
    {date: "2019-06-17", sessionKey: 7}
    {date: "2019-06-24", sessionKey: 8}
    {date: "2019-07-01", sessionKey: 9}
    {date: "2019-05-01", sessionKey: 1}
    {date: "2019-05-08", sessionKey: 2}
    {date: "2019-05-15", sessionKey: 3}
    {date: "2019-05-22", sessionKey: 4}
    {date: "2019-05-29", sessionKey: 5}
    {date: "2019-06-05", sessionKey: 6}
    {date: "2019-06-12", sessionKey: 7}
    {date: "2019-06-19", sessionKey: 8}
    {date: "2019-06-26", sessionKey: 9}
    {date: "2019-04-30", sessionKey: 1}
    {date: "2019-05-07", sessionKey: 2}
    {date: "2019-05-14", sessionKey: 3}
    {date: "2019-05-21", sessionKey: 4}
    {date: "2019-05-28", sessionKey: 5}
    {date: "2019-06-04", sessionKey: 6}
    {date: "2019-06-11", sessionKey: 7}
    {date: "2019-06-18", sessionKey: 8}
    {date: "2019-06-25", sessionKey: 9}
]

给张图,容易看一些:

 

排序要求:先按 sessionKey 升序排,再按 date 升序排

方法一:不太好理解,不会改变数据

const sortId = (a,b) => {   //按session排序
    if(a.sessionKey === b.sessionKey) {     //如果sessionKey相同,按日期排序
         const aa = a.date.replace(/-/g,'');   //将日期转成 '20190321' 便于 - 运算,'2019-02-21'这种格式不能相减 
         const bb = b.date.replace(/-/g,'');
              // if(a.date < b.date){            //如果b的日期大于a的日期
                   return aa - bb;             //升序
              // }else{
              //      return bb - aa;             //升序
              // }
     }else{          //默认按sessionKey 升序排序
          return a.sessionKey-b.sessionKey;      
     }
}

dataSessionArr.sort(sortId);           //执行sort排序,传入回调函数

结果:

方法二:简单,容易理解,但会添加属性

// 给原数组的每一个元素添加一个Time属性
const deal_data = dataSessionArr.map(item => {
     item.Time = new Date(item.date).getTime();
     return item;
})

// 先按sessionKey排序
const sortSessionKey = deal_data.sort(function(a,b){
     return a.sessionKey - b.sessionKey;
})

//再用按sessionKey排序得到的数组,按Time排序
const finallyData = sortSessionKey.sort(function(a,b){
     return a.Time - b.Time;
})

结果:

 

文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值