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

如何在DataWeave中使用groupBy实现指定格式输出?

按客户分组订单数据实现方案

输入示例

[
  { "item": 621, "orderid": "ON22", "qty": 45.0, "customer": "610", "date": "1988-08-13" },
  { "item": 63, "orderid": "ON2234", "qty": 7, "customer": "813", "date": "2001-08-13" }
]

期望输出示例

[
  {
    "customer":"813",
    "data":[
      { "item":63, "qty":7, "orderid":"ON2234", "date":"2001-08-13" }
    ]
  },
  {
    "customer":"610",
    "data":[
      { "item": 621, "qty": 45.0, "orderid": "ON22", "date": "1988-08-13" }
    ]
  }
]

实现思路(以JavaScript为例)

通过Array.prototype.reduce()先按customer完成分组,再将分组结果转换为目标结构:

const orders = [
  { "item": 621, "orderid": "ON22", "qty": 45.0, "customer": "610", "date": "1988-08-13" },
  { "item": 63, "orderid": "ON2234", "qty": 7, "customer": "813", "date": "2001-08-13" }
];

// 1. 按customer分组,构建客户-订单列表的映射
const customerMap = orders.reduce((acc, order) => {
  const { customer, ...orderDetail } = order;
  if (!acc[customer]) {
    acc[customer] = [];
  }
  acc[customer].push(orderDetail);
  return acc;
}, {});

// 2. 将映射转换为目标数组格式
const result = Object.entries(customerMap).map(([customer, data]) => ({
  customer,
  data
}));

console.log(result);

代码说明

  • 分组阶段:遍历订单数组,以客户ID为键,将去除customer字段后的订单详情存入对应数组,形成{ 客户ID: [订单详情数组] }的映射结构。
  • 格式转换阶段:提取映射的键值对,直接映射为期望的{customer, data}对象数组。

如果同一客户存在多个不同orderid的订单,该代码也能自动将所有订单归入对应客户的data数组,满足按客户分组的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:15:33