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

如何用JavaScript合并具有相同键值的JSON对象并整合字段

合并具有相同name键值的JSON对象

针对你的需求,我们可以通过分组+字段合并的方式实现,以下是具体的JavaScript代码实现,适合初学者理解:

实现代码

const originalData = {
    "data": [
        {
            "name": "A",
            "description": {
                "location": "location1",
                "floor": "floor1",
            },
        },
        {
            "name": "A",
            "description": {
                "location": "location2",
                "floor": "floor1",
            },
        },
        {
            "name": "B",
            "description": {
                "location": "location3",
                "floor": "floor3",
            },
        },
    ]
};

// 1. 创建临时对象,按name字段分组存储数据
const groupedItems = {};

// 2. 遍历原始数据,逐个处理每个对象
originalData.data.forEach(item => {
    const { name, description } = item;

    // 如果当前name还没被分组,初始化一个新对象
    if (!groupedItems[name]) {
        groupedItems[name] = {
            name,
            // 浅拷贝原description,避免修改原数据
            description: { ...description }
        };
        return;
    }

    // 3. 合并description中的字段
    const existingDesc = groupedItems[name].description;
    Object.keys(description).forEach(key => {
        const currentVal = description[key];
        const existingVal = existingDesc[key];

        // 如果两个值不同,需要合并成数组
        if (existingVal !== currentVal) {
            // 先把已有值转成数组(如果还不是数组的话)
            if (!Array.isArray(existingVal)) {
                existingDesc[key] = [existingVal];
            }
            // 添加新值到数组
            existingDesc[key].push(currentVal);
        }
        // 值相同则直接保留,无需操作
    });
});

// 4. 把分组对象转成数组,得到最终结果
const mergedResult = { data: Object.values(groupedItems) };

// 打印结果验证
console.log(JSON.stringify(mergedResult, null, 2));

代码说明

  • 分组逻辑:用groupedItems对象以name为键存储分组后的对象,确保相同name的对象只会被初始化一次。
  • 字段合并:遍历description的每个字段,对比已有值和当前值:
    • 值相同:直接保留原数值
    • 值不同:将已有值转为数组,再追加新值
  • 结果转换:通过Object.values(groupedItems)把分组对象的所有值提取成数组,匹配你需要的输出结构。

注意事项

  • 代码中用了浅拷贝({ ...description }),如果你的description里有嵌套的复杂对象,需要改用深拷贝(比如JSON.parse(JSON.stringify(description)))来避免意外修改原数据。
  • 这个逻辑支持description中多个字段的合并,不止局限于location字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:40:19