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

JavaScript实现数组按日期排序并按group属性分组

实现方案

首先修正原始数组的语法问题(date值需用字符串包裹,否则会被解析为数值运算):

const originalArray = [
  {date: '2023-05-06', group: 'groupA'},
  {date: '2023-05-05', group: 'group1'},
  {date: '2023-05-07', group: 'groupA'},
  {date: '2023-05-08', group: 'group1'},
];

实现步骤

  1. 按group分组,组内按日期降序排序
    先把数组按group属性归类,每个组内的元素按照日期从新到旧排列:

    // 分组并组内排序
    const grouped = {};
    originalArray.forEach(item => {
      if (!grouped[item.group]) {
        grouped[item.group] = [];
      }
      grouped[item.group].push(item);
      // 组内按日期降序排序
      grouped[item.group].sort((a, b) => new Date(b.date) - new Date(a.date));
    });
    
  2. 对分组后的组按组内最新日期降序排序
    把分组后的各组,按照每组第一个元素(组内最新日期)的时间从新到旧排列:

    // 将分组转为数组,并按组内最新日期排序
    const sortedGroups = Object.values(grouped).sort((groupA, groupB) => {
      return new Date(groupB[0].date) - new Date(groupA[0].date);
    });
    
  3. 展开分组得到最终数组
    把排序后的各组展开成一个一维数组:

    const result = sortedGroups.flat();
    console.log(result);
    

最终输出结果

运行代码后会得到预期的数组:

[
  { date: '2023-05-08', group: 'group1' }, // 数组中最新的元素
  { date: '2023-05-05', group: 'group1' }, // 同组内第二新的元素
  { date: '2023-05-07', group: 'groupA' }, // 数组中第二新的元素
  { date: '2023-05-06', group: 'groupA' }  // 同组内第二新的元素
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:52