带地图的过滤器和范围不起作用

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 文档。它阻碍了很多人。在大多数情况下,仅使用括号更安全。