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

如何按colors属性合并JavaScript对象数组,将其余属性存入info数组?

按颜色合并JavaScript对象数组的解决方案

需求说明

给定以下对象数组:

const array = [
    { price: 27, colors: "BLACK", size: "S" },
    { price: 23, colors: "GREEN", size: "S" },
    { price: 0, colors: "GREEN", size: "M" },
    { price: 0, colors: "OLIVE", size: "S" },
    { price: 65, colors: "RED", size: "S" },
    { price: 12, colors: "RED", size: "M" },
    { price: 12, colors: "BLACK", size: "L" },
    { price: 34, colors: "RED", size: "L" },
    { price: 43, colors: "OLIVE", size: "M" },
    { price: 23, colors: "OLIVE", size: "L" },
    { price: 34, colors: "GREEN", size: "L" }
];

需要按colors属性分组合并,每个分组对象保留colors,将对应的price和size存入info数组,最终得到:

[
    { colors: "BLACK", info: [{ size: "S", price: 27 }, { size: "L", price: 12 }] },
    { colors: "GREEN", info: [{ size: "S", price: 23 }, { size: "M", price: 0 }, { size: "L", price: 34 }] },
    { colors: "RED", info: [{ size: "S", price: 65 }, { size: "M", price: 12 }, { size: "L", price: 34 }] },
    { colors: "OLIVE", info: [{ size: "S", price: 0 }, { size: "M", price: 43 }, { size: "L", price: 23 }] }
]

实现方案

方案一:使用Array.reduce(高效推荐)

这是性能最优的方案,仅需遍历一次原数组:

const mergedArray = Object.values(array.reduce((grouped, item) => {
    // 解构分离colors和其他属性
    const { colors, ...details } = item;
    // 如果当前颜色未分组,初始化分组对象
    if (!grouped[colors]) {
        grouped[colors] = { colors, info: [] };
    }
    // 将当前项的细节推入对应分组的info数组
    grouped[colors].info.push(details);
    return grouped;
}, {}));

console.log(mergedArray);

方案二:先取唯一颜色再过滤映射

逻辑更直观,适合理解基础分组逻辑:

// 获取所有不重复的颜色值
const uniqueColors = [...new Set(array.map(item => item.colors))];

const mergedArray = uniqueColors.map(color => ({
    colors: color,
    // 过滤出当前颜色的所有项,再去掉colors字段存入info
    info: array.filter(item => item.colors === color).map(({ colors, ...rest }) => rest)
}));

console.log(mergedArray);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:22:48