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

日期数组过滤:每日仅保留一条日期记录实现方案咨询

解决日期数组每日仅保留一条记录的问题

嘿,我明白你遇到的困扰了!要实现这个每日仅留一条记录的需求,我们可以结合filter方法和一个Set来跟踪已经处理过的日期,思路很清晰,我给你一步步拆解:

核心思路

我们需要把每个日期字符串的**日期部分(忽略时间)**提取出来,用一个集合记录已经保留过的日期,这样遍历数组时,只保留每个日期第一次出现的那条记录,后续同日期的就直接过滤掉。

具体实现代码

let myDatesArray = [ 
  "Sun Oct 01 2017 05:30:00 GMT+0530 (IST)", 
  "Mon Oct 02 2017 05:30:00 GMT+0530 (IST)", 
  "Mon Oct 02 2017 06:30:00 GMT+0530 (IST)", 
  "Tue Oct 03 2017 05:30:00 GMT+0530 (IST)", 
  "Wed Oct 04 2017 05:30:00 GMT+0530 (IST)", 
  "Thu Oct 05 2017 05:30:00 GMT+0530 (IST)", 
  "Fri Oct 06 2017 05:30:00 GMT+0530 (IST)", 
  "Sat Oct 07 2017 05:30:00 GMT+0530 (IST)"
];

// 用Set来存储已经处理过的日期(仅日期部分,不含时间)
const seenDates = new Set();

const filteredDates = myDatesArray.filter(dateStr => {
  // 将日期字符串转为Date对象,再提取仅含日期的字符串(比如"Mon Oct 02 2017")
  const dateOnly = new Date(dateStr).toDateString();
  // 如果这个日期还没被记录过,就添加到Set并保留该元素
  if (!seenDates.has(dateOnly)) {
    seenDates.add(dateOnly);
    return true;
  }
  // 已经有相同日期的记录了,过滤掉当前元素
  return false;
});

console.log(filteredDates);

代码说明

  • new Date(dateStr).toDateString():这个方法会把日期对象转换成不含时间、格式统一的字符串,比如所有10月2日的记录都会得到"Mon Oct 02 2017",这样就能准确识别同一天的不同时间记录。
  • Set的作用是快速判断某个日期是否已经被保留过,它的has和add方法都是O(1)的时间复杂度,效率很高。
  • 最终filteredDates里就会保留每个日期的第一条记录,10月2日的第二条记录会被成功过滤掉。

扩展小技巧

如果你需要保留每天的特定时间记录(比如最早/最晚的),可以先对数组按时间排序,再执行上面的过滤逻辑,这样就能得到你想要的那条记录啦~

内容的提问来源于stack exchange,提问作者Walter Monecke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:41:01