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

如何在Mule中依据对象公共字段合并数组内的字段值

对象数组按公共字段合并指定字段

需求说明

给定对象数组,需依据对象的公共字段值合并address1、mobile、nickName字段,规则如下:

  • mobile合并为数组,重复值仅保留一次
  • address1与nickName拼接为逗号分隔的字符串
  • 若active字段值不同,对象不参与合并

输入示例

[
  {
    "address1": "Koala Boulevard-314",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["12345","45678"],
    "name": "Michael",
    "nickName": "Mike",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  },
  {
    "address1": "Park Avenue-879",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["65789","45678"],
    "name": "Michael",
    "nickName": "Mic",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  },
  {
    "address1": "Koala Boulevard-314",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["89065","67895"],
    "name": "Michael",
    "nickName": "Mike",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  },
  {
    "address1": "Koala Boulevard-314",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["36926","85931"],
    "name": "Michael",
    "nickName": "Mike",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  }
]

期望输出

[
  {
    "address1": "Koala Boulevard-314,Park Avenue-879",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["12345","45678","65789"], 
    "name": "Michael",
    "nickName": "Mike,Mic",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  },
  {
    "address1": "Koala Boulevard-314",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["89065","67895"],
    "name": "Michael",
    "nickName": "Mike",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "true",
    "dob": "1996-05-01"
  },
  {
    "address1": "Koala Boulevard-314",
    "city": "San Diego",
    "country": "USA",
    "mobile": ["36926","85931"],
    "name": "Michael",
    "nickName": "Mike",
    "postalCode": "1345",
    "stateOrProvince": "CA",
    "active": "false",
    "dob": "1996-05-01"
  }
]

实现方案(JavaScript)

function mergeObjects(arr) {
  const groupMap = new Map();
  
  arr.forEach(obj => {
    // 生成分组标识:包含所有公共字段,确保active不同的对象不合并
    const key = [obj.name, obj.city, obj.country, obj.postalCode, obj.stateOrProvince, obj.active, obj.dob].join('-');
    
    if (!groupMap.has(key)) {
      groupMap.set(key, {
        ...obj,
        address1: new Set([obj.address1]),
        mobile: new Set(obj.mobile),
        nickName: new Set([obj.nickName])
      });
    } else {
      const existing = groupMap.get(key);
      existing.address1.add(obj.address1);
      obj.mobile.forEach(num => existing.mobile.add(num));
      existing.nickName.add(obj.nickName);
    }
  });
  
  // 转换Set为目标格式
  return Array.from(groupMap.values()).map(item => ({
    ...item,
    address1: Array.from(item.address1).join(','),
    mobile: Array.from(item.mobile),
    nickName: Array.from(item.nickName).join(',')
  }));
}

// 测试调用
const input = [/* 输入示例中的数组 */];
console.log(JSON.stringify(mergeObjects(input), null, 2));

代码说明

  1. 分组逻辑:通过公共字段(含active)拼接成唯一key,用Map存储分组,确保active不同的对象不会被合并
  2. 去重处理:用Set存储address1、mobile、nickName,自动实现去重
  3. 格式转换:最后将Set转换为逗号分隔字符串或数组,匹配期望输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:17:12