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

DataWeave技术求助:按匹配键值合并对象数组并求和quantity

解决DataWeave数组对象合并求和问题

这问题我熟,用DataWeave的分组+聚合就能轻松搞定!

思路说明

核心逻辑就是先按指定维度分组,再对分组内的目标字段求和:

  • 用groupBy把item和code组合作为唯一标识,将相同组合的对象归为一组
  • 对每个分组里的quantity字段做累加计算(注意要先处理类型转换,因为输入的quantity是字符串)
  • 最后把分组后的键值对结构转回数组,得到最终格式

DataWeave 2.0 实现代码

%dw 2.0
output application/json
---
// 1. 按item+code的组合分组,用|做分隔符避免键冲突
payload groupBy ((obj) -> obj.item ++ "|" ++ obj.code) 
    // 2. 遍历每个分组,合并对象并计算quantity总和
    mapValues ((groupedItems) -> {
        item: groupedItems[0].item,
        code: groupedItems[0].code,
        // 把字符串类型的quantity转成数字累加,再转回字符串保持格式一致
        quantity: (groupedItems reduce ((item, total = 0) -> total + item.quantity as Number)) as String
    })
    // 3. 把分组的键值对结构转成数组
    pluck ($)

代码关键细节解释

  1. 分组键设计:obj.item ++ "|" ++ obj.code 用分隔符拼接两个字段,能避免不同字段组合却生成相同键的冲突(比如item="12"+code="ABC" 和 item="1"+code="2ABC"的情况)
  2. 求和逻辑:用reduce遍历分组内的每个对象,逐步累加quantity值。因为输入的quantity是字符串类型,必须先转成Number才能计算,最后转回String是为了和输入的字段格式保持一致
  3. 数组转换:groupBy返回的是键值对对象,用pluck ($)可以提取所有值并组成数组,正好匹配我们需要的输出结构

验证结果

把你提供的输入代入这段代码,就能得到完全符合期望的输出:

[
  { "item": "1", "quantity": "300", "code":"ABC" },
  { "item": "1", "quantity": "200", "code":"CDB" },
  { "item": "12", "quantity": "200", "code":"ABC" }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:42:27