如何比较两个日期数组、移除重复日期并添加次日至数组?
解决日期数组去重并添加次日的问题
需求明确
我们需要完成以下操作:
- 对比两个日期数组
dateList和quickList - 移除两个数组中重复的日期
- 将每个重复日期的次日添加到
quickList中
原代码问题分析
你提供的代码片段有几个小问题:
- 代码末尾的
quic...是截断状态,没有完成后续操作 - 如果直接在循环中修改数组(比如移除元素),会因为数组长度变化导致部分元素遍历遗漏
- 只判断了日期相等的情况,但没有实现移除重复项的逻辑
完整解决方案代码
这里我们用Moment.js来处理日期(你已经引入了Moment,所以可以直接用),同时优化循环逻辑避免遍历遗漏:
// 原始日期数组 var dateList = ["01-01-2018", "14-01-2018", "26-01-2018", "14-02-2018", "02-03-2018", "18-03-2018", "25-03-2018", "29-03-2018", "30-03-2018", "30-04-2018", "01-05-2018" ]; var quickList = ["30-04-2018", "01-05-2018"]; // 先收集所有重复日期,避免循环中修改原数组导致遍历出错 const duplicateDates = []; for (const date of quickList) { if (dateList.includes(date)) { duplicateDates.push(date); } } // 逐个处理重复日期 duplicateDates.forEach(date => { // 1. 从dateList中移除重复日期 const dateIndex = dateList.indexOf(date); if (dateIndex !== -1) { dateList.splice(dateIndex, 1); } // 2. 从quickList中移除重复日期 const quickIndex = quickList.indexOf(date); if (quickIndex !== -1) { quickList.splice(quickIndex, 1); } // 3. 计算次日并添加到quickList const nextDay = moment(date, "DD-MM-YYYY").add(1, 'days').format('DD-MM-YYYY'); quickList.push(nextDay); }); // 输出处理后的结果 console.log("处理完的dateList:", dateList); console.log("处理完的quickList:", quickList);
代码说明
- 先收集重复项:先遍历一次数组把所有重复日期存起来,后续处理时就不会因为修改原数组长度导致遍历遗漏
- 移除重复项:用
indexOf定位元素位置,再通过splice方法从数组中移除 - 计算次日:借助Moment.js的
add(1, 'days')方法快速获取次日,再格式化回DD-MM-YYYY格式 - 添加次日到数组:把计算好的次日日期push到
quickList中
运行结果
处理后你会得到:
dateList不再包含"30-04-2018"和"01-05-2018"quickList会变成["01-05-2018", "02-05-2018"](对应原重复日期的次日)
内容的提问来源于stack exchange,提问作者Ranjith
相关产品推荐
相关产品推荐

