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

JavaScript数组按ISO-8601日期条件归约的实现疑问

问题:按日期分组事件的特殊需求是否可行?

我有一个包含ISO-8601格式日期和事件类型字符串的事件数组:

[
  {date: "2023-01-11T18:00:00+00:00", type: "Meeting"},
  {date: "2023-01-12T13:00:00+00:00", type: "Lunch"},
  {date: "2023-01-12T13:00:00+00:00", type: "Meeting"},
  {date: "2023-01-13T09:00:00+00:00", type: "Phonecall"},
  {date: "2023-01-13T09:00:00+00:00", type: "Breakfast"},
  {date: "2023-01-13T09:00:00+00:00", type: "Meeting"}
]

我用下面的脚本按ISO-8601日期对事件分组:

events.reduce((time, event) => {
  const date = event.date;
  if (!time[date]) {
    time[date] = [];
  }
  time[date].push(event);

  return time;
}, {});

这段代码能正常运行,但我想加个条件:仅当同一ISO-8601日期对应的事件数量超过2个时才进行分组,期望输出如下:

2023-01-11T18:00:00+00:00:
0: {date: "2023-01-11T18:00:00+00:00", type: "Meeting"}

2023-01-12T13:00:00+00:00:
0: {date: "2023-01-12T13:00:00+00:00", type: "Lunch"}

2023-01-12T13:00:00+00:00:
0: {date: "2023-01-12T13:00:00+00:00", type: "Meeting"}

2023-01-13T09:00:00+00:00:
0: {date: "2023-01-13T09:00:00+00:00", type: "Phonecall"}
1: {date: "2023-01-13T09:00:00+00:00", type: "Breakfast"}
2: {date: "2023-01-13T09:00:00+00:00", type: "Meeting"}

我觉得因为对象的键不能重复,这种需求没法实现,请问我的想法对吗?


解答

你的想法不完全对——如果非要用纯对象来输出,确实没法重复键,但可以换一种数据结构实现你的需求:

方案:用数组存储分组结果

先完成常规的分组统计,再把分组结果转换成数组:当某日期的事件数>2时,把整个组作为一项放进数组;当事件数≤2时,把每个事件单独作为一项(每项包含日期和对应的单个事件)。

实现代码如下:

// 第一步:先完成常规分组
const grouped = events.reduce((time, event) => {
  const date = event.date;
  if (!time[date]) {
    time[date] = [];
  }
  time[date].push(event);
  return time;
}, {});

// 第二步:转换为符合需求的结构
const result = [];
for (const [date, eventsList] of Object.entries(grouped)) {
  if (eventsList.length > 2) {
    result.push({ [date]: eventsList });
  } else {
    eventsList.forEach(event => {
      result.push({ [date]: [event] });
    });
  }
}

输出成目标文本格式

如果需要打印成你展示的文本样式,可遍历result数组输出:

result.forEach(item => {
  const [date, events] = Object.entries(item)[0];
  console.log(`${date}:`);
  events.forEach((event, index) => {
    console.log(`${index}:`, event);
  });
  console.log();
});

这样就能得到你想要的输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:05:24