嵌套数组列表上的 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"})