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

如何按id对指定对象数组进行分组并完成排序?

没问题,我来帮你搞定这个数组的分组和排序操作!下面是基于JavaScript的实现方案,分步骤说明:

数组按ID分组并排序的解决方案

一、先排序数组,再按ID分组

我们可以先根据sortOrder(或者id,因为两者在你的数据里是一一对应的)对整个数组进行排序,确保分组后的结果也是按顺序排列的,再用reduce方法完成分组。

完整代码示例

const originalArray = [
  { color: "#000000", id: 1, image: "", languageId: 1, name: "Black", productAttributeId: 1, sortOrder: 1 },
  { color: "#000000", id: 1, image: "", languageId: 2, name: "สีดำ", productAttributeId: 1, sortOrder: 1 },
  { color: "#ffffff", id: 2, image: "", languageId: 1, name: "White", productAttributeId: 1, sortOrder: 2 },
  { color: "#ffffff", id: 2, image: "", languageId: 2, name: "ขาว", productAttributeId: 1, sortOrder: 2 },
  { color: "#c0c0c0", id: 3, image: "", languageId: 1, name: "Gray", productAttributeId: 1, sortOrder: 3 },
  { color: "#c0c0c0", id: 3, image: "", languageId: 2, name: "สีเทา", productAttributeId: 1, sortOrder: 3 },
  { color: "#b3b300", id: 4, image: "", languageId: 1, name: "Golden", productAttributeId: 1, sortOrder: 4 },
  { color: "#b3b300", id: 4, image: "", languageId: 2, name: "โกลเด้น", productAttributeId: 1, sortOrder: 4 }
];

// 步骤1:按sortOrder排序数组(也可以用id排序,结果一致)
const sortedArray = [...originalArray].sort((a, b) => a.sortOrder - b.sortOrder);

// 步骤2:按id分组
const groupedById = sortedArray.reduce((acc, current) => {
  // 如果当前id对应的分组不存在,就创建一个空数组
  if (!acc[current.id]) {
    acc[current.id] = [];
  }
  // 将当前对象推入对应id的分组数组
  acc[current.id].push(current);
  return acc;
}, {});

console.log(groupedById);

代码说明

  • 排序部分:用[...originalArray]先复制原数组,避免修改原数据,然后用sort方法比较sortOrder的差值,实现升序排序(如果要降序就用b.sortOrder - a.sortOrder)。
  • 分组部分:reduce方法遍历排序后的数组,以每个对象的id作为键,将相同id的对象收集到同一个数组中,最终得到一个以id为键、对应分组数组为值的对象。

二、如果需要分组后得到有序的数组(而非对象)

如果你希望分组后的结果是一个有序的数组(每个元素是一组数据),可以在分组后再处理:

// 从分组对象中提取值,并保持排序顺序
const orderedGroups = Object.values(groupedById);
console.log(orderedGroups);

这样得到的orderedGroups就是按sortOrder排列的分组数组,每个子数组对应同一个id的所有对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:49:39