需要 DW 帮助: 下面是输入。对象之间存在父子关系。 “关键”列指定了这一点。 例如。 109-200C-001 是 109-200C 的孩子。将有 n 个具有不同字符串的对象。
[
{
"Class": 1,
"Amount": 2,
"Key": "109-200C-001"
},
{
"Class": 3,
"Amount": 4,
"Key": "109-200C"
},
{
"Class": 8,
"Amount": 7,
"Key": "xyz-123-007"
},
{
"Class": 8,
"Amount": 4,
"Key": "xyz-123"
},
]
需要如下输出:只有添加了 Amount of Child 和 Parent 的父对象。
[
{
"Class": 3,
"Amount": 6,
"Key": "109-200C"
},
{
"Class": 8,
"Amount": 11,
"Key": "xyz-123"
}
]
我首先删除子对象,然后对于每个父对象,我将以相同键开头的所有元素的值相加。将部分逻辑封装在函数中使脚本在意图上非常明确。
%dw 2.0
output application/json
import * from dw::core::Arrays
fun isParent(a, x)=a some ( !($.Key == x.Key) and ($.Key startsWith x.Key))
fun sumChilds(a, x)=a filter ($.Key startsWith x.Key) sumBy $.Amount
---
payload
filter isParent(payload, $)
map {
Class: $.Class,
Ammount: sumChilds(payload, $),
Key: $.Key
}
输出:
[
{
"Class": 3,
"Ammount": 6,
"Key": "109-200C"
},
{
"Class": 8,
"Ammount": 11,
"Key": "xyz-123"
}
]
我本可以使用
update
运算符而不是 map()
。