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

如何从events事件列表中按升序提取每年的唯一月份?

提取事件列表中唯一的年-月映射并排序

问题描述

我有一个名为events的事件列表,其中每个事件对象包含日期属性。我需要从中提取所有唯一的年份与对应月份,并按升序排列,期望得到如下结果:

unique = {
  "2023": [
    "January", "October"
  ],
  "2024": [
    "March"
  ]
}

我的输入数组如下:

events = [
    {
        "eventid": 6,
        "name": "Event 1",
        "description": "This is the first event.",
        "date": "10.10.2023",
        "status": "XO"
    },
    {
        "eventid": 8,
        "name": "Event 2",
        "description": "This is another event",
        "date": "14.01.2023",
        "status": "XO"
    },
    {
        "eventid": 8,
        "name": "Event 3",
        "description": "This is the last event",
        "date": "14.03.2024",
        "status": "OS"
    }
]

解决方案

以下是实现需求的JavaScript代码,包含日期解析、去重和排序逻辑:

// 定义月份全称与数字的映射
const monthNames = [
  "January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];

const unique = {};

// 遍历事件数组,提取并存储年月信息
events.forEach(event => {
  // 分割日期字符串:格式为 dd.mm.yyyy
  const [_, monthStr, year] = event.date.split('.');
  // 将数字月份转换为英文全称(注意月份是0索引,需减1)
  const monthName = monthNames[parseInt(monthStr, 10) - 1];

  // 初始化年份对应的数组
  if (!unique[year]) {
    unique[year] = [];
  }
  // 仅添加未存在的月份,保证唯一性
  if (!unique[year].includes(monthName)) {
    unique[year].push(monthName);
  }
});

// 对年份升序排序,同时对每个年份下的月份按自然顺序排序
const sortedResult = Object.fromEntries(
  Object.entries(unique)
    // 按年份数字升序排列
    .sort(([yearA], [yearB]) => parseInt(yearA) - parseInt(yearB))
    // 对每个年份的月份数组按月份顺序排序
    .map(([year, months]) => [
      year,
      months.sort((a, b) => monthNames.indexOf(a) - monthNames.indexOf(b))
    ])
);

console.log(sortedResult);

逻辑说明

  1. 月份映射:通过monthNames数组将数字月份(如01)转换为对应的英文全称。
  2. 遍历与去重:遍历每个事件,解析日期后将月份添加到对应年份的数组中,通过includes确保月份不重复。
  3. 排序处理:
    • 将对象转为键值对数组后,按年份数字进行升序排序。
    • 对每个年份下的月份数组,依据monthNames中的索引排序,保证月份按自然时间顺序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:20:47