需求是这样的:
拿到后台返回的时间数组,并将连续部分的时间给连接起来
// 后台返回的时间
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' ]
// 成功!!!!