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

基于categoryId合并数组对象并整合addons列表

合并相同categoryId的对象并整合addons列表

我有一个对象数组,其中多个对象的categoryId一致,每个对象包含一个addons列表。需求是将具有相同categoryId的对象合并为单个对象,并将所有对应的addons列表整合到该对象的addons中。尝试过map和groupBy方法但未奏效,以下是输入示例与期望的输出示例:

输入示例

[
  {
    "addons": [
      {
        "addonId": "Addon_5035fac357f446fb8b4fcff45d2e36e5",
        "addonIdentifier": "Gherkin",
        "addonQuantity": 1,
        "subTotal": 0.99,
        "addonType": "EXTRAS"
      }
    ],
    "categoryId": "Addon_Cate_1a7bacd1a07b40ceb7d5d3a2229fb303",
    "categoryIdentifier": "Extra 1"
  },
  {
    "addons": [
      {
        "addonId": "Addon_700a1458fae54ba9b3e148da709eea4a",
        "addonIdentifier": "Hash Brown",
        "addonQuantity": 1,
        "subTotal": 0.99,
        "addonType": "EXTRAS"
      }
    ],
    "categoryId": "Addon_Cate_1a7bacd1a07b40ceb7d5d3a2229fb303",
    "categoryIdentifier": "Extra 1"
  },
  {
    "addons": [
      {
        "addonId": "Addon_f4408295adb14723aa22a3a7e645a7a7",
        "addonIdentifier": "Cheese",
        "addonQuantity": 1,
        "subTotal": 0.99,
        "addonType": "EXTRAS"
      }
    ],
    "categoryId": "Addon_Cate_1a7bacd1a07b40ceb7d5d3a2229fb303",
    "categoryIdentifier": "Extra 1"
  }
]

期望输出示例

[{
"addons": [
  {
    "addonId": "Addon_5035fac357f446fb8b4fcff45d2e36e5",
    "addonIdentifier": "Gherkin",
    "addonQuantity": 1,
    "subTotal": 0.99,
    "addonType": "EXTRAS"
  },
  {
    "addonId": "Addon_700a1458fae54ba9b3e148da709eea4a",
    "addonIdentifier": "Hash Brown",
    "addonQuantity": 1,
    "subTotal": 0.99,
    "addonType": "EXTRAS"
  },
  {
    "addonId": "Addon_f4408295adb14723aa22a3a7e645a7a7",
    "addonIdentifier": "Cheese",
    "addonQuantity": 1,
    "subTotal": 0.99,
    "addonType": "EXTRAS"
  }
],
"categoryId": "Addon_Cate_1a7bacd1a07b40ceb7d5d3a2229fb303",
"categoryIdentifier": "Extra 1"}]

解决方案

原生JavaScript实现

使用reduce方法遍历数组,合并相同categoryId的对象:

const inputArray = // 你的输入数组
const mergedArray = inputArray.reduce((acc, current) => {
  const existingItem = acc.find(item => item.categoryId === current.categoryId);
  if (existingItem) {
    // 合并addons列表
    existingItem.addons = [...existingItem.addons, ...current.addons];
  } else {
    // 浅拷贝当前对象加入累加器,避免修改原数组对象
    acc.push({ ...current });
  }
  return acc;
}, []);

Lodash实现(使用groupBy)

如果项目中已引入Lodash,可以结合groupBy和flatMap实现:

const _ = require('lodash');

const inputArray = // 你的输入数组
// 按categoryId分组
const groupedItems = _.groupBy(inputArray, 'categoryId');
// 转换为合并后的数组
const mergedArray = Object.values(groupedItems).map(group => ({
  ...group[0],
  addons: group.flatMap(item => item.addons)
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:55:32