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

如何按月份(唯一键)将日期分组为对应数组?

问题:按月份分组日期时仅保留每个月最后一条数据

我有如下带序号的日期数据,需要按月份将日期分组为对应数组:

1 => Thu Feb 16 2023
1 => Fri Feb 17 2023
1 => Sat Feb 18 2023
1 => Sun Feb 19 2023
1 => Mon Feb 20 2023
1 => Tue Feb 21 2023
1 => Wed Feb 22 2023
1 => Thu Feb 23 2023
1 => Fri Feb 24 2023
1 => Sat Feb 25 2023
1 => Sun Feb 26 2023
1 => Mon Feb 27 2023
1 => Tue Feb 28 2023
2 => Wed Mar 01 2023
2 => Thu Mar 02 2023
2 => Fri Mar 03 2023

期望得到的分组格式:

1 => [Fri Feb 17 2023, Sat Feb 18 2023, ...],
2 => [Wed Mar 01 2023, Thu Mar 02 2023, ...]

我的代码如下:

let dts = {};
newDates.forEach((dt, i) => {
  let mn = new Date(dt).getMonth();
  dts[mn] = dt;
});
console.log(dts);

但运行后仅得到每个月份的最后一个日期:

1 : Tue Feb 28 2023
2 : Fri Mar 03 2023

请问该如何解决这个问题?


解决方案

问题出在每次循环直接覆盖了对应月份的取值:dts[mn] = dt会把当前月份对应的键值替换成最新的dt,所以最后只保留了每个月的最后一条数据。

要实现分组数组,需要先判断当前月份的键是否已存在数组,不存在则初始化空数组,再将日期推入数组:

修正后的代码:

let dts = {};
newDates.forEach((dt) => {
  let mn = new Date(dt).getMonth();
  // 若当前月份未初始化数组,先创建空数组
  if (!dts[mn]) {
    dts[mn] = [];
  }
  // 将当前日期推入对应月份的数组
  dts[mn].push(dt);
});
console.log(dts);

运行后会得到期望的分组结果:

1: [
  "Thu Feb 16 2023",
  "Fri Feb 17 2023",
  ...,
  "Tue Feb 28 2023"
],
2: [
  "Wed Mar 01 2023",
  "Thu Mar 02 2023",
  "Fri Mar 03 2023"
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:55:33