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

如何合并具有相同address值的JSON对象?

合并具有相同address值的JSON对象解决方案

原始输入示例

[
  {
    "address": "123 Main St",
    "name": "Alice",
    "phone": "555-1234"
  },
  {
    "address": "123 Main St",
    "email": "alice@example.com"
  },
  {
    "address": "456 Oak Ave",
    "name": "Bob",
    "email": "bob@example.com"
  }
]

期望合并结果

[
  {
    "address": "123 Main St",
    "name": "Alice",
    "phone": "555-1234",
    "email": "alice@example.com"
  },
  {
    "address": "456 Oak Ave",
    "name": "Bob",
    "email": "bob@example.com"
  }
]

JavaScript 实现方案

基础合并(后出现的属性覆盖前序同属性)

const mergeByAddress = (arr) => {
  // 以address为键分组存储对象
  const groupedMap = arr.reduce((acc, current) => {
    const addressKey = current.address;
    // 合并对象:已有则扩展,无则直接存入
    acc[addressKey] = acc[addressKey] ? {...acc[addressKey], ...current} : {...current};
    return acc;
  }, {});
  
  // 将分组对象转为数组返回
  return Object.values(groupedMap);
};

// 测试使用
const originalData = [
  {"address": "123 Main St", "name": "Alice", "phone": "555-1234"},
  {"address": "123 Main St", "email": "alice@example.com"},
  {"address": "456 Oak Ave", "name": "Bob", "email": "bob@example.com"}
];

const mergedResult = mergeByAddress(originalData);
console.log(mergedResult);

冲突属性处理(同属性多值转为数组)

如果存在同address下属性名相同但值不同的情况,可以把冲突属性转为数组保存所有值:

const mergeByAddressWithConflict = (arr) => {
  const groupedMap = arr.reduce((acc, current) => {
    const addressKey = current.address;
    if (!acc[addressKey]) {
      acc[addressKey] = {...current};
      return acc;
    }
    // 遍历当前对象属性,处理冲突
    for (const prop in current) {
      if (acc[addressKey].hasOwnProperty(prop)) {
        // 已存在的属性,转为数组存储多值
        acc[addressKey][prop] = Array.isArray(acc[addressKey][prop]) 
          ? [...acc[addressKey][prop], current[prop]] 
          : [acc[addressKey][prop], current[prop]];
      } else {
        acc[addressKey][prop] = current[prop];
      }
    }
    return acc;
  }, {});
  return Object.values(groupedMap);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:15:39