在 dataweave 2.0 中访问 reduce 函数中的项目索引

access the index of the item inside reduce function in dataweave 2.0

我的 DataWeave 代码如下所示:-

Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}

有没有办法检查项目对象的索引。我需要根据项目对象的索引做条件。

示例: Item = Data[0] 这样做 ;

Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}

Item = Data[1] 这样做 ;

Result: Data reduce (item,ls={}) -> ls ++ To: {dev: item.warehouse}

原始代码如下所示:

Result : ( Data  reduce (
             item,ls={}) -> ls ++ 
From:{id: "111",(if (item.sign == "333") {status: "OPEN"} else if (item.sign == "444") {status: "HOLD"} else {status: item.sign})}

只要项目的索引是奇数,我就需要添加"From",当项目的索引是偶数时,我需要添加"To"。

因为我没有条件,所以我总是得到 "From"

不,您不能访问任何索引,这里是 reduce https://docs.mulesoft.com/mule-runtime/4.1/dw-core-functions-reduce

的文档

你可以做的是通过修改累加器的结构自己计算项目:ls={counter=0,data={}}

现在您可以使用计数器在每次迭代中添加一个并跟踪事物:{counter: ls.counter + 1, data: ls.data ++ To: {dev: item.warehouse}}

如您所知,您需要添加一个条件来区分 FromTo

如果我以后有时间我会为你做,或者其他人可以比我先做。

编辑:根据你的问题,这是我能做的最好的,但你应该明白了:

%dw 2.0
output application/dw
var inputdata = [{warehouse: 100},{warehouse: 56}, {warehouse:1000}]
---
inputdata reduce (
    (e, acc={c: 0, data: {From: {}, To: {}}}) ->
        {
            c: acc.c+1,
            data: {
                From: if (isEven(acc.c)) (acc.data.From ++ {warehouse: e.warehouse}) else acc.data.From,
                To: if (isEven(acc.c)) acc.data.To else (acc.data.To ++ {warehouse: e.warehouse})
            }
        } 
)

如果您想充分利用 DW SO 社区,请始终提供适当的示例输入和转换输出 ;)