如何按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
相关产品推荐
相关产品推荐

