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

如何在JavaScript中按月份对事件数组进行排序?

按日历月份顺序排序事件数组

你当前用localeCompare是按月份缩写的字母顺序排序,自然不符合真实日历顺序的要求。要搞定这个需求,直接用给定的MONTHS数组的索引位置就能实现——这个数组本身就是按日历顺序排列的,每个月份对应的索引正好对应它在一年中的先后顺序(比如JAN是0,FEB是1,以此类推)。

修改后的代码

const MONTHS = [
    'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN',
    'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'
];

function sortByMonth(events) {
    // 通过月份在MONTHS数组中的索引差值来确定排序顺序
    events.sort((a, b) => MONTHS.indexOf(a.month) - MONTHS.indexOf(b.month));
}

测试示例

const events = [
    { event: 'prom', month: 'MAY' },
    { event: 'graduation', month: 'JUN' },
    { event: 'dance', month: 'JAN' }
];

sortByMonth(events);
console.log(events);
// 输出结果:
// [{ event: 'dance', month: 'JAN' },
//  { event: 'prom', month: 'MAY' },
//  { event: 'graduation', month: 'JUN' }]

原理说明

  • MONTHS.indexOf(a.month)会返回该月份在顺序数组中的位置(比如MAY对应索引4,JAN对应索引0)
  • 用两个索引值相减的结果作为排序依据:
    • 差值为负时,a的月份更早,排在前面
    • 差值为正时,b的月份更早,排在前面
    • 差值为0时,两者相对顺序保持不变

这样就能精准实现按日历月份的先后顺序对事件数组排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:22:02