带地图的过滤器和范围不起作用
filter and range with map are not working
我需要遍历一个列表,但只从该列表中提取前两个元素。
我写了下面的代码
payload.list.*listItem filter ($.type == "supervisor") map {
// other code
}
这工作得很好。然后我修改它只提取前两个元素这样
payload.list.*listItem filter ($.type == "supervisor") [0 to 1] map {
// other code
}
它不再起作用了。我没有收到任何错误,但其他代码无法正常工作,就好像地图操作员没有什么可处理的。
如果应用过滤器后只有一个元素,我还需要让它适用于某个场景。
我应该如何更改我的代码才能使其正常工作。
范围选择器必须直接在数组上使用,因此您只需要正确地进行选择:
(payload.list.*listItem filter ($.type == "supervisor"))[0 to 1] map {
// other code
}
您需要添加括号以确保优先级。另外,我很惊讶它对你有用。我需要将 "type" 放在单引号中才能使其正常工作,因为这是一个 dataweave 关键字。我这样做 ?($$<2)
而不是 [0 to 1]
因为我不确定你是否保证在过滤器的输出中至少有两个对象。如果你知道,你至少会有两个,保持原样。
(payload.list.*listItem filter ($.'type' == "supervisor"))[?($$<2)] map (value, index) ->
{
"key":value
}
这是关于优先级的 link Dataweave 文档。它阻碍了很多人。在大多数情况下,仅使用括号更安全。
我需要遍历一个列表,但只从该列表中提取前两个元素。
我写了下面的代码
payload.list.*listItem filter ($.type == "supervisor") map {
// other code
}
这工作得很好。然后我修改它只提取前两个元素这样
payload.list.*listItem filter ($.type == "supervisor") [0 to 1] map {
// other code
}
它不再起作用了。我没有收到任何错误,但其他代码无法正常工作,就好像地图操作员没有什么可处理的。
如果应用过滤器后只有一个元素,我还需要让它适用于某个场景。 我应该如何更改我的代码才能使其正常工作。
范围选择器必须直接在数组上使用,因此您只需要正确地进行选择:
(payload.list.*listItem filter ($.type == "supervisor"))[0 to 1] map {
// other code
}
您需要添加括号以确保优先级。另外,我很惊讶它对你有用。我需要将 "type" 放在单引号中才能使其正常工作,因为这是一个 dataweave 关键字。我这样做 ?($$<2)
而不是 [0 to 1]
因为我不确定你是否保证在过滤器的输出中至少有两个对象。如果你知道,你至少会有两个,保持原样。
(payload.list.*listItem filter ($.'type' == "supervisor"))[?($$<2)] map (value, index) ->
{
"key":value
}
这是关于优先级的 link Dataweave 文档。它阻碍了很多人。在大多数情况下,仅使用括号更安全。