如何比较单个数组中的两个或多个字段并计算最小值



我需要比较单个数组中的字段(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))

最新更新