在 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}}
如您所知,您需要添加一个条件来区分 From
和 To
。
如果我以后有时间我会为你做,或者其他人可以比我先做。
编辑:根据你的问题,这是我能做的最好的,但你应该明白了:
%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 社区,请始终提供适当的示例输入和转换输出 ;)
我的 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}}
如您所知,您需要添加一个条件来区分 From
和 To
。
如果我以后有时间我会为你做,或者其他人可以比我先做。
编辑:根据你的问题,这是我能做的最好的,但你应该明白了:
%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 社区,请始终提供适当的示例输入和转换输出 ;)