嵌套数组列表上的 dataweave 过滤器和 maxBy
dataweave filter and maxBy on nested array list
我有一份学生名单及其各科成绩。我想过滤特定年级的所有学生,然后找到在特定对象中获得最高分的学生。
[
{
"name": "User 01",
"grade": 1,
"schoolName": "school01",
"marks": {
"english": 10,
"math": 30,
"social": 30
}
},
{
"name": "User 02",
"grade": 1,
"schoolName": "school02",
"marks": {
"english": 10,
"math": 20,
"social": 30
}
}
]
我可以独立完成这两项操作。谁能帮我找到特定年级数学最高分的学生对象。
如果我正确理解您的要求,这个脚本就可以做到。只需将变量 grade 和 topic 更改为您感兴趣的特定值即可。
一般来说,除了输入示例之外,最好提供示例输出和任何您获得的脚本以更好地理解上下文。
%dw 2.0
output application/json
var grade = 1
var topic = "math"
---
flatten(
payload map (alumn, order) ->
(alumn.marks pluck ((value, key, index) ->
{
name: alumn.name,
grade: alumn.grade,
result:value,
topic: key
})
)
) // restructure the list to one result per element
filter ((item, index) -> (item.grade == grade)) // filter by grade
maxBy ((item) -> item.result) // get the maximum result
下面我用它实现了
%dw 2.0
output application/json
var grade = 1
var topic = "math"
---
payload filter (
((item, index) -> item.grade == grade)
) maxBy ($.marks.math as String {format: "000000"})
我有一份学生名单及其各科成绩。我想过滤特定年级的所有学生,然后找到在特定对象中获得最高分的学生。
[
{
"name": "User 01",
"grade": 1,
"schoolName": "school01",
"marks": {
"english": 10,
"math": 30,
"social": 30
}
},
{
"name": "User 02",
"grade": 1,
"schoolName": "school02",
"marks": {
"english": 10,
"math": 20,
"social": 30
}
}
]
我可以独立完成这两项操作。谁能帮我找到特定年级数学最高分的学生对象。
如果我正确理解您的要求,这个脚本就可以做到。只需将变量 grade 和 topic 更改为您感兴趣的特定值即可。
一般来说,除了输入示例之外,最好提供示例输出和任何您获得的脚本以更好地理解上下文。
%dw 2.0
output application/json
var grade = 1
var topic = "math"
---
flatten(
payload map (alumn, order) ->
(alumn.marks pluck ((value, key, index) ->
{
name: alumn.name,
grade: alumn.grade,
result:value,
topic: key
})
)
) // restructure the list to one result per element
filter ((item, index) -> (item.grade == grade)) // filter by grade
maxBy ((item) -> item.result) // get the maximum result
下面我用它实现了
%dw 2.0
output application/json
var grade = 1
var topic = "math"
---
payload filter (
((item, index) -> item.grade == grade)
) maxBy ($.marks.math as String {format: "000000"})