如何使用DataWeave按对象值将对象数组拆分为二维数组
按指定字段拆分数组(DataWeave实现)
问题需求
将对象数组按route字段值为"L1"的元素拆分,每个子数组包含从上一个拆分点到当前"L1"元素的所有对象(包含"L1"元素本身)。
解决方案代码
%dw 2.0 output application/json --- payload reduce ((item, acc = {current: [], result: []}) -> if (item.route == "L1") { current: [], result: acc.result << (acc.current << item) } else { current: acc.current << item, result: acc.result } ).result
代码解释
- 核心思路:利用
reduce函数维护遍历过程中的状态,实现动态分组。累加器acc包含两个关键部分:current:临时存储当前正在构建的子数组result:存储已完成拆分的子数组集合
- 遍历逻辑:
- 遇到
route="L1"的元素时,将current数组与当前元素合并,追加到result中,随后重置current为空数组 - 非"L1"元素直接加入
current数组,继续构建当前子数组
- 遇到
- 结果提取:遍历结束后,累加器中的
result字段即为最终的拆分结果
为什么不用splitAt/filter?
splitAt需要提前知道固定拆分索引,无法适配动态的"L1"位置filter仅能筛选元素,无法实现连续区间的分组拆分,不符合需求
内容的提问来源于stack exchange,提问作者LoveMuleSoft
相关产品推荐
相关产品推荐

