我需要比较单个数组中的字段(Doc(,如果它们的值匹配,我需要计算另一个字段(Number(的最小值
下面是阵列的一个例子:
[
{
"Doc": "test1",
"Number": 91
},
{
"Doc": "test1",
"Number": 94
},
{
"Doc": "test1",
"Number": 40
},
{
"Doc": "test2",
"Number": 82
},
{
"Doc": "test2",
"Number": 80
}
]
在上面的数组中,如果Doc相同,我想得到Number字段的最小值。我的输出应该是这样的:
[
{
"Doc": "test1",
"Number": 40
}
{
"Doc": "test2",
"Number": 80
}
]
使用valuesOf
:的替代方案
%dw 2.0
output application/json
fun byDoc() = valuesOf(payload groupBy ((item, index) -> item.Doc))
fun minNumber(array : Array) = array minBy ((item) -> item.Number)
---
byDoc() map ((item, index) -> minNumber(item))
首先按Doc分组,mapObject((获得每组的最小值,然后pulk((获得预期输出。
%dw 2.0
output application/json
---
payload groupBy ((item, index) -> item.Doc)
mapObject ((value, key, index) -> (key): min(value.Number) )
pluck ((value, key, index) -> { Doc: key, Number: value})
输入:
[
{
"Doc": "STR23756",
"Number": 91
},
{
"Doc": "STR23756",
"Number": 94
},
{
"Doc": "STR23756",
"Number": 40
},
{
"Doc": "STR23757",
"Number": 82
},
{
"Doc": "STR23757",
"Number": 80
}
]
输出:
[
{
"Doc": "STR23756",
"Number": 40
},
{
"Doc": "STR23757",
"Number": 80
}
]
%dw 2.0输出应用程序/json
payload groupBy$。DocmapObject((项、键、索引(->(键(:min(项目编号((pick((项、键、索引(->{Doc:key,Number:item}(
这两个答案对我都有效。
解决方案1:
%dw 2.0
output application/json
---
payload groupBy ((item, index) -> item.Doc)
mapObject ((value, key, index) -> (key): min(value.Number) )
pluck ((value, key, index) -> { Doc: key, Number: value})
解决方案2:
%dw 2.0
output application/json
fun byDoc() = valuesOf(payload groupBy ((item, index) -> item.Doc))
fun minNumber(array : Array) = array minBy ((item) -> item.Number)
---
byDoc() map ((item, index) -> minNumber(item))