js截取并连接连续的时间范围

需求是这样的:

拿到后台返回的时间数组,并将连续部分的时间给连接起来

// 后台返回的时间
let arr = [
    201903, 
    201902, 
    201901, 
    201904, 
    201905, 
    201907,    
    201908, 
    201909, 
    201910, 
    201911, 
    201912, 
    202001,
    202003
   ]

// 需要处理成最终的格式为:
let newArr = ['201903-201905','201907-202001','202003-202003']
// 定义一个方法整理每个日期范围
function fn(arr) {
  let result = [] // 结果
  let result2 = [] // 每个范围对应的数组
  arr.sort((a,b) => a -b) // 数组排序
  for (let i = 0; i < arr.length; i++){
      let num = arr[i + 1] - arr[i] // 大的值减去小的值
      if (num == 1 || num == 89) { // 考虑到跨年份的关系 需要判断差为1或者 89
        result2.push(arr[i])
      } else {
        // 如果判断到不是连续的则将该数组放进结果数组  并且清空范围数组去存储后面的日期范围
        result2.push(arr[i]) // 记得把差值判断完的最后一项也放进日期范围数组
        result.push(result2) // 再push到结果
        result2 = [] // 清空日期范围数组
      }
  }
// for循环遍历之后成了这个样子
/* 
[ 
    [ 201901, 201902, 201903, 201904, 201905 ], 
    [201907, 201908, 201909, 201910, 201911, 201912, 202001], 
    [ 202003 ] 
] 
*/
  
  // 此时再用map方法去拼接范围数组的第一项和最后一项即可
result = result.map(item => item[0] + '-' + item[item.length - 1]

// 调用方法传入数组
let result = fn([201903, 201902, 201901, 201904, 201905, 201907, 201908, 201909, 201910, 201911, 201912, 202001, 202003])
// 返回的结果为
console.log(result);
// [ '201901-201905', '201907-202001', '202003-202003' ]
// 成功!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值