一个有序的时间数组,如何按照每一天分组?

  1. 思路:
  • 由于时间都是按照顺序排列的,所以,就顺着这条时间线来判断每一个item的时间是否在这个每一组里;
  • 翠花,上图~!
    请添加图片描述
 // [ {key:当天零点时间戳, value:[每一条历史纪录,]} ]
 const _processedHistory = [];
 // 判断是否生成新的一组(用时间戳)
 let _createdAtFlag;
 // 存每一组
 let _currentProcessedItem = {};
 
 _data.forEach((historyItem, index)=>{
     // 每条item的时间戳  new Date(historyItem.created_at)
    const _currentHistoryCreatedAt = new Date(historyItem.created_at);
    
    // 第一组
    if (!_createdAtFlag) {
    	// 第一条的时间戳,记为当前这一组的标记
         _createdAtFlag = _currentHistoryCreatedAt;
         
         _currentProcessedItem.title = _currentHistoryCreatedAt.setHours(0, 0, 0, 0);
         _currentProcessedItem.items = [ historyItem ];
         
         // 考虑到的情况是:所有时间都是同一天的,且只有一条
         if (_data.length === index + 1) {
             _processedHistory.push(_currentProcessedItem);
         }

	// 在当前这一组时间的0点和24点之间
     } else if (_createdAtFlag.setHours(0, 0, 0, 0) < _currentHistoryCreatedAt &&
     _currentHistoryCreatedAt < _createdAtFlag.setHours(23, 59, 59, 999)) {
         _currentProcessedItem.items.push(historyItem);
         
		// 考虑到的情况是:所有时间都是同一天的
         if (_data.length === index + 1) {
             _processedHistory.push(_currentProcessedItem);
         }
   
   	// 不在当前这一组时间的0点和24点之间(下一天)    
     } else {
     	
     	_processedHistory.push(_currentProcessedItem);
         // 新的一天
         _currentProcessedItem = {};
         _createdAtFlag = _currentHistoryCreatedAt;// 下一天的第一条的时间戳
         _currentProcessedItem.title = _currentHistoryCreatedAt.setHours(0, 0, 0, 0);
         _currentProcessedItem.items = [ historyItem ];
     }
 });
 setHistory(_processedHistory);


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值