You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个日期数组、移除重复日期并添加次日至数组?

解决日期数组去重并添加次日的问题

需求明确

我们需要完成以下操作:

  • 对比两个日期数组 dateList 和 quickList
  • 移除两个数组中重复的日期
  • 将每个重复日期的次日添加到 quickList 中

原代码问题分析

你提供的代码片段有几个小问题:

  1. 代码末尾的 quic... 是截断状态,没有完成后续操作
  2. 如果直接在循环中修改数组(比如移除元素),会因为数组长度变化导致部分元素遍历遗漏
  3. 只判断了日期相等的情况,但没有实现移除重复项的逻辑

完整解决方案代码

这里我们用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:42:53