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

合并数组重复订单:按order_id合并products数组与order_type

合并相同order_id的订单条目

可以通过遍历订单数组,借助临时对象分组并合并相同order_id的订单条目,以下是具体实现:

const orders = [
  {
    "order_details": {},
    "order_id": "1",
    "order_status": "Pending",
    "order_type": "drugs",
    "products": [{"name": "product xyz"}]
  },
  {
    "order_details": {},
    "order_id": "2",
    "order_status": "Pending",
    "order_type": "Prescriptions",
    "products": [{"name": "product abc"}]
  },
  {
    "order_details": {},
    "order_id": "1",
    "order_status": "Pending",
    "order_type": "goods",
    "products": [{"name": "product ghj"}]
  }
];

// 临时映射,按order_id分组存储合并中的订单
const mergedMap = {};

orders.forEach(order => {
  const { order_id } = order;
  if (!mergedMap[order_id]) {
    // 首次遇到该order_id,初始化合并对象
    mergedMap[order_id] = { ...order };
    // 用数组存储order_type,方便后续去重和拼接
    mergedMap[order_id].order_type = [order.order_type];
    // 复制products数组避免引用问题
    mergedMap[order_id].products = [...order.products];
  } else {
    // 合并products数组
    mergedMap[order_id].products.push(...order.products);
    // 添加新的order_type并去重
    if (!mergedMap[order_id].order_type.includes(order.order_type)) {
      mergedMap[order_id].order_type.push(order.order_type);
    }
  }
});

// 转换为最终数组格式,将order_type转为"a & b"字符串
const mergedOrders = Object.values(mergedMap).map(item => ({
  ...item,
  order_type: item.order_type.join(" & ")
}));

console.log(mergedOrders);

关键说明:

  • 用mergedMap按order_id分组,避免重复遍历,提升处理效率
  • 对order_type用数组存储并去重,确保同一类型不会重复拼接
  • 采用浅拷贝处理订单对象和数组,若订单包含深层嵌套结构(如order_details有复杂字段),可替换为深拷贝(比如JSON.parse(JSON.stringify(order)))

运行代码后即可得到你期望的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:53