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

如何在JavaScript中按Name分组JSON数组并合并Product_Line__c?

合并相同Name的JSON数组条目实现方法

你可以用JavaScript的Array.prototype.reduce()方法来快速实现这个需求,这是处理分组合并类场景的常用方案,代码逻辑清晰易懂,适合新手理解:

// 原始JSON数组
const originalData = [
  {"Name":"Marcelo Rocha","Product_Line__c":"SAP","Role":"Regional Manager, SAP Support Delivery, LATAM"},
  {"Name":"Marcelo Rocha","Product_Line__c":"Business Objects","Role":"Regional Manager, SAP Support Delivery, LATAM"},
  {"Name":"Marcelo Rocha","Product_Line__c":"Oracle Technology","Role":"Regional Manager, SAP Support Delivery, LATAM"},
  {"Name":"Leonardo Gracioli","Product_Line__c":"SAP","Role":"Senior Support Engineer, SAP"},
  {"Name":"Leonardo Gracioli","Product_Line__c":"Business Objects","Role":"Senior Support Engineer, SAP"},
  {"Name":"Leonardo Gracioli","Product_Line__c":"Oracle Technology","Role":"Senior Support Engineer, SAP"},
  {"Name":"Adriane Yonamine","Product_Line__c":"SAP","Role":"SAP Consultant"}
];

// 执行分组合并
const mergedData = Object.values(originalData.reduce((acc, item) => {
  // 用Name作为分组的唯一标识
  const nameKey = item.Name;
  if (!acc[nameKey]) {
    // 首次遇到该Name,初始化分组项,把Product_Line__c存为数组方便后续追加
    acc[nameKey] = {
      ...item,
      Product_Line__c: [item.Product_Line__c]
    };
  } else {
    // 已存在该Name,直接追加产品线到数组
    acc[nameKey].Product_Line__c.push(item.Product_Line__c);
  }
  return acc;
}, {})).map(item => {
  // 把产品线数组转为逗号分隔的字符串
  return {
    ...item,
    Product_Line__c: item.Product_Line__c.join(',')
  };
});

console.log(mergedData);

逻辑说明

  1. reduce分组:遍历原始数组,用一个临时对象存储每个Name对应的分组数据,键为Name值,值为合并中的条目。
  2. 初始化/追加产品线:首次碰到某个Name时,复制条目并将Product_Line__c转为数组;后续碰到相同Name时,直接把新的产品线值追加到数组里。
  3. 转数组并格式化:用Object.values()把临时对象转成数组,再通过map把每个条目的产品线数组转为逗号分隔的字符串。

可选优化:去重产品线

如果担心同一Name下出现重复的产品线值,可以用Set来去重,修改后的代码如下:

const mergedData = Object.values(originalData.reduce((acc, item) => {
  const nameKey = item.Name;
  if (!acc[nameKey]) {
    acc[nameKey] = {
      Name: item.Name,
      Role: item.Role,
      Product_Line__c: new Set([item.Product_Line__c])
    };
  } else {
    acc[nameKey].Product_Line__c.add(item.Product_Line__c);
  }
  return acc;
}, {})).map(item => {
  return {
    ...item,
    Product_Line__c: Array.from(item.Product_Line__c).join(',')
  };
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:50:28