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'}, ];
实现步骤
按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)); });对分组后的组按组内最新日期降序排序
把分组后的各组,按照每组第一个元素(组内最新日期)的时间从新到旧排列:// 将分组转为数组,并按组内最新日期排序 const sortedGroups = Object.values(grouped).sort((groupA, groupB) => { return new Date(groupB[0].date) - new Date(groupA[0].date); });展开分组得到最终数组
把排序后的各组展开成一个一维数组: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
相关产品推荐
相关产品推荐

