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

如何按对象中的id-key字段分组生成目标对象数组?

按id-key字段分组聚合Payload数据

问题描述

给定一个包含嵌套对象的输入Payload,需要按照id-key字段执行分组操作,将相同id-key对应的productId聚合到数组中,生成指定结构的对象数组。

输入Payload(注:原始输入存在重复键问题,已修正为数组形式)

{
  "id": {
    "header_id": "460",
    "id-branch": [
      {
        "branch-name": "genaral motors",
        "req-name": "genaral motors",
        "id-key": "0791",
        "id-lines": {
          "id-key": "0791",
          "productId": "463"
        }
      },
      {
        "branch-name": "genaral motors",
        "req-name": "genaral motors",
        "id-key": "9692",
        "id-lines": [
          {
            "id-key": "9692",
            "productId": "464"
          },
          {
            "id-key": "9692",
            "productId": "465"
          }
        ]
      }
    ]
  }
}

说明:原始输入中id对象下存在两个同名的id-branch键,在JSON/JavaScript环境中重复键会被后面的覆盖,因此修正为数组形式以保留所有分支数据;同时第二个分支的id-lines也修正为数组,避免重复键导致数据丢失。

期望输出

[                      
 {
  "branch-name": "genaral motors",
  "req-name": "genaral motors",
  "type": "dhl",
  "lines-ids": "swr",
  "lines": [
    {
      "productId": "463"
    }
  ]
 },
 {
  "branch-name": "genaral motors",
  "req-name": "genaral motors",
  "type": "dhl",
  "lines-ids": "swr",
  "lines": [
    {
      "productId": "464"
    },
    {
      "productId": "465"
    }
  ]
 }
]

实现方案(JavaScript)

// 修正结构后的输入数据
const input = {
  "id": {
    "header_id": "460",
    "id-branch": [
      {
        "branch-name": "genaral motors",
        "req-name": "genaral motors",
        "id-key": "0791",
        "id-lines": {
          "id-key": "0791",
          "productId": "463"
        }
      },
      {
        "branch-name": "genaral motors",
        "req-name": "genaral motors",
        "id-key": "9692",
        "id-lines": [
          {
            "id-key": "9692",
            "productId": "464"
          },
          {
            "id-key": "9692",
            "productId": "465"
          }
        ]
      }
    ]
  }
};

// 执行分组聚合
const result = input.id['id-branch'].map(branch => {
  // 统一将id-lines转为数组格式
  const linesList = Array.isArray(branch['id-lines']) ? branch['id-lines'] : [branch['id-lines']];
  // 提取productId构造lines数组
  const lines = linesList.map(item => ({ productId: item.productId }));
  
  // 构造目标结构对象
  return {
    "branch-name": branch['branch-name'],
    "req-name": branch['req-name'],
    "type": "dhl",
    "lines-ids": "swr",
    lines
  };
});

console.log(JSON.stringify(result, null, 2));

代码说明

  1. 结构修正处理:先将原始输入中存在重复键的id-branch和id-lines转为数组,确保所有数据不丢失。
  2. 统一行数据格式:判断id-lines是否为数组,统一转为数组后再处理,避免单条数据和多条数据的格式差异。
  3. 聚合productId:遍历行数据,提取productId并构造指定格式的lines数组。
  4. 生成目标对象:按照期望输出的结构填充字段,其中type和lines-ids为固定值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:31:05