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

如何使用DataWeave对数组对象的同键值进行求和(首键保留)

满足需求的DataWeave脚本

需求概述

第一个键保持原样,其余键对应的值需进行求和运算,结果中对应值末尾必须保留斜杠“/”,且DataWeave脚本需具备动态性(无需硬编码字段名)。

输入示例

[
    {
        "a": "40",
        "b": "60",
        "c": "20/"
    },
    {
        "a": "40",
        "b": "10",
        "c": "10/"
    }
]

输出示例

[
    {
        "a": "40",
        "b": "70",
        "c": "30/"
    }
]

DataWeave 2.0 脚本

%dw 2.0
output application/json
---
payload 
    // 按第一个字段的值分组,确保同组对象的第一个字段值一致
    groupBy ((item) -> item[keysOf(item)[0]])
    // 遍历分组,聚合生成目标对象
    mapObject ((groupItems, groupKey) -> {
        // 保留第一个字段,直接使用分组键作为值
        (keysOf(groupItems[0])[0]): groupKey,
        // 处理剩余所有字段:求和后添加末尾斜杠
        (keysOf(groupItems[0])[1 to -1] map ((field) -> {
            (field): (groupItems sum ((item) -> 
                // 移除输入值末尾的斜杠,转数字求和后再转回字符串并补斜杠
                item[field] replace /\/$/ with "" as Number
            )) as String ++ "/"
        }) reduce ($$ ++ $))
    })
    // 将聚合后的对象转换为数组格式
    pluck $

脚本说明

  • 动态适配字段:通过keysOf(item)[0]动态获取每个对象的第一个字段,keysOf(groupItems[0])[1 to -1]获取剩余所有字段,无需硬编码字段名(如a/b/c)
  • 值处理逻辑:先移除输入值末尾可能存在的斜杠,转换为数字完成求和,再转回字符串并强制添加斜杠,保证输出格式统一
  • 分组聚合:基于第一个字段的值分组,确保所有同第一个字段值的对象都会被合并,自动处理多组场景(比如如果输入中有多个不同第一个字段值的对象,会分别聚合)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:14