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

如何按两个条件对对象数组进行排序?

对象数组的多条件排序解决方案

你需要给对象数组实现以下排序规则:

  • 整体按 value 字段排序
  • 拥有相同 name 的对象必须相邻,且同组内按 value 顺序排列

实现步骤

1. 预处理分组基准值

先为每个 name 计算一个基准值(示例用组内最小的 value),以此保证相同 name 的对象作为一个整体参与排序:

const arr = [
  { name: "X", value: 5 },
  { name: "A", value: 3 },
  { name: "A", value: 1 },
  { name: "B", value: 2 },
];

// 记录每个name对应的最小value,作为组排序的基准
const nameGroupKey = {};
arr.forEach(item => {
  if (!nameGroupKey[item.name] || item.value < nameGroupKey[item.name]) {
    nameGroupKey[item.name] = item.value;
  }
});

2. 自定义排序函数

利用 Array.sort() 结合预处理的基准值,完成多条件排序:

arr.sort((a, b) => {
  // 优先按组的基准值排序,确保同name的组整体顺序正确
  const groupDiff = nameGroupKey[a.name] - nameGroupKey[b.name];
  if (groupDiff !== 0) {
    return groupDiff;
  }

  // 同name的对象,按value字段排序
  if (a.name === b.name) {
    return a.value - b.value;
  }

  // 基准值相同但name不同时,按name排序保证结果稳定性
  return a.name.localeCompare(b.name);
});

最终排序结果

执行后数组会变为:

[
  { name: "A", value: 1 },
  { name: "A", value: 3 },
  { name: "B", value: 2 },
  { name: "X", value: 5 }
]

灵活调整说明

  • 若需要降序排序,只需将排序函数中的减法结果取反(比如 return groupDiff * -1)
  • 若想以组内最大 value 作为基准,把预处理中的 < 替换为 > 即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:55:27