选日期的时候提取相邻的日期天数?

checkList:\[  
    {  
        date:'2019-01-01',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-02',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-03',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-05',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-03',  
        num:1,  
        roomId:2  
    },  
    {  
        date:'2019-01-04',  
        num:1,  
        roomId:2  
    }  
\],  
checkList2:\[  
    {  
        date:'2019-01-01',  
        num:3,  
        roomId:1  
    },  
    {  
        date:'2019-01-05',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-03',  
        num:2,  
        roomId:2  
    }  
\]  

最终我想把list这个初始数据变成list2这样的数据要怎么弄,num是天数,roomId是房间idQQ截图20191231172213.png

阅读 1.6k
1 个回答

image.png

  1. 排序,这样方便统计
  2. 判断当前和历史的戳是否连贯。连贯就++。不连贯就push
checkList=[  
    {  
        date:'2019-01-01',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-02',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-03',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-05',  
        num:1,  
        roomId:1  
    },  
    {  
        date:'2019-01-03',  
        num:1,  
        roomId:2  
    },  
    {  
        date:'2019-01-04',  
        num:1,  
        roomId:2  
    }  
].sort((n,m)=>{
    var roomIdsort = n.roomId - m.roomId
    return roomIdsort?roomIdsort:(n.date<m.date?-1:1)
}).reduce((s,v)=>{
    if(s.last && (s.last.roomId == v.roomId) && (new Date(v.date)-new Date(s.last.date)<=1000*60*60*24*s.last.num)){
        s.last.num++    
    }else{
        s.last = v;
        s.list.push(v)
    }
    return s
}, {list: [], last: {}})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题