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

JavaScript如何按日期范围过滤包含嵌套日期值的分月对象数组?

事件数组按日期范围过滤实现方案

你原有代码存在2个问题:

  • 直接对字符串类型的日期调用getTime()会抛出错误,必须先转换为Date实例
  • 仅判断月份维度的日期无法满足天级过滤需求,且无法过滤月份内无符合条件事件的分组

纯ES6实现

const dateRange = ["Nov 15 2021", "Dec 04 2021"];
// 提前转换起止日期为时间戳,避免重复转换损耗性能
const minTime = new Date(dateRange[0]).getTime();
const maxTime = new Date(dateRange[1]).getTime();

const filteredEvents = allEvents
  // 遍历每个月份分组,先过滤分组内符合时间范围的事件
  .map(eventGroup => {
    const validEvents = eventGroup.value.filter(event => {
      const eventTimestamp = new Date(event.date).getTime();
      return eventTimestamp >= minTime && eventTimestamp <= maxTime;
    })
    // 返回处理后的分组,仅保留有效事件
    return { ...eventGroup, value: validEvents };
  })
  // 筛除没有有效事件的空月份分组
  .filter(eventGroup => eventGroup.value.length > 0);

运行以上代码得到的结果和你给出的预期返回完全一致。


Lodash实现(可选)

如果你习惯使用lodash,可以用更简洁的写法:

const minTime = new Date(dateRange[0]).getTime();
const maxTime = new Date(dateRange[1]).getTime();

const filteredEvents = _.chain(allEvents)
  .map(group => ({
    ...group,
    value: _.filter(group.value, e => new Date(e.date).getTime() >= minTime && new Date(e.date).getTime() <= maxTime)
  }))
  .filter(group => !_.isEmpty(group.value))
  .value();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:00