如何在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
相关产品推荐
相关产品推荐

