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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:12:01