如何用JS将对象数组按type分组且同类型按createdAt升序排列
JavaScript数组多条件排序实现方案
你可以直接使用JS数组原生的sort()方法实现该需求,排序逻辑按照你要求的优先级依次判断即可:
基础实现(按type默认字母序分组)
const notificdations = [ // 你提供的原数组内容,此处省略 ]; // 复制原数组避免修改原始数据,不需要保留原数组可直接调用 notificdations.sort() const sortedResult = [...notificdations].sort((a, b) => { // 第一优先级:type相同的集中排列 if (a.type !== b.type) { // 按type字符串的字母序排序,相同type自动聚合 return a.type.localeCompare(b.type); } // 第二优先级:同type下按createdAt时间升序排列 return new Date(a.createdAt) - new Date(b.createdAt); });
自定义type排序顺序
如果你需要指定type的先后排列顺序(比如强制ON_BREAK类型排在IDLE类型前面),可以添加自定义优先级映射表:
// 定义type优先级,数值越小排列越靠前 const typePriorityMap = { "ON_BREAK": 1, "IDLE": 2 }; const sortedResult = [...notificdations].sort((a, b) => { if (a.type !== b.type) { return typePriorityMap[a.type] - typePriorityMap[b.type]; } return new Date(a.createdAt) - new Date(b.createdAt); });
逻辑说明
sort()方法的比较函数返回负数时,a会排在b前面;返回正数时,b排在a前面;返回0时顺序不变。- ISO格式的时间字符串可以直接通过
new Date()转为时间戳做数值比较,时间越早对应的时间戳数值越小,升序排列直接用a的时间减b的时间即可。
内容的提问来源于stack exchange,提问作者GAURAV RAJPUT
相关产品推荐
相关产品推荐

