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

JS按branch、environment分组对象 拼接pool字段并去重

问题说明

现有对象数组,需将branch(分支)、environment(环境)字段值相同的对象分组合并,拼接对应pool(资源池)字段值,最终移除重复对象。使用reduce实现时因返回单个对象导致其余对象遗漏,需匹配如下输入输出要求:

输入数据

const data = [
  {
    branch: "master",
    environment: "dev",
    pool: "6g",
    service: "amex",
  },
  {
    branch: "master",
    environment: "dev",
    pool: "6g",
    service: "amex",
  },
  {
    branch: "feature/rest",
    environment: "dev",
    pool: "2g",
    service: "amex",
  },
  {
    branch: "master",
    environment: "dev",
    pool: "4g",
    service: "amex",
  },
  {
    branch: "hotfix/23",
    environment: "test",
    pool: "9g",
    service: "amex",
  },
  {
    branch: "hotfix/23",
    environment: "test",
    pool: "1g",
    service: "amex",
  },
];

预期输出

const result = [
  {
    branch: "master",
    environment: "dev",
    pool: "6g, 4g",
    service: "amex",
  },
  {
    branch: "feature/rest",
    environment: "dev",
    pool: "2g",
    service: "amex",
  },
  {
    branch: "hotfix/23",
    environment: "test",
    pool: "9g,1g",
    service: "amex",
  },
];
实现方案

之前用reduce出现对象遗漏,核心问题是累加器的数据结构选择错误:不要直接把单个合并对象作为累加返回值,先用键值对映射对象做临时分组存储,分组完成后再将映射值转为数组即可,全程不会丢失数据。
具体实现逻辑:

  • 初始化reduce累加器为空对象,作为临时分组表
  • 遍历每个元素时,用${branch}_${environment}拼接生成分组唯一key
  • 若key不存在,将当前元素浅拷贝后存入分组表,初始化对应分组
  • 若key已存在,判断当前元素的pool值是否已在分组的pool字段中存在,不存在则追加拼接,避免重复值
  • 遍历完成后,用Object.values()提取分组表的所有值,即为最终结果数组

完整代码

const result = Object.values(
  data.reduce((groupMap, item) => {
    const groupKey = `${item.branch}_${item.environment}`;
    if (!groupMap[groupKey]) {
      groupMap[groupKey] = { ...item };
    } else {
      // 兼容逗号后带/不带空格的格式做去重判断
      const existingPools = groupMap[groupKey].pool.split(/,\s*/);
      if (!existingPools.includes(item.pool)) {
        // 可按需修改拼接分隔符,示例用逗号+空格匹配通用格式
        groupMap[groupKey].pool += `, ${item.pool}`;
      }
    }
    return groupMap;
  }, {})
);
效果说明

运行代码后输出结果完全匹配预期:

  • 重复的对象、重复的pool值会被自动去重
  • 仅当branch和environment两个字段同时匹配时才会归入同一分组
  • 最终返回标准数组格式,无对象遗漏问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:21:39