我的DataWeave代码如下:---------------。
Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}
有没有办法检查项对象的索引。我需要根据项目对象的索引来做条件。
Example:Item = Data[0] do this ;
Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}
Item = Data[1] do this ;
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})}
我需要在Item的索引是奇数时添加 "From",在Item的索引是偶数时添加 "To"。
由于我没有条件,我总是得到 "From"。
不,你不能访问任何索引,这里是文档中的 reduce
https:/docs.mulesoft.commule-runtime4.1dw-core-function-reduce。
你可以做的是通过修改你的累加器的结构,自己计算项目。ls={counter=0,data={}}
现在,你可以使用计数器每次迭代增加一个,并跟踪事情的进展。{counter: ls.counter + 1, data: ls.data ++ To: {dev: item.warehouse}}
正如你所理解的那样,你需要添加一个条件来区分不同的项目 From
和 To
.
如果我以后有时间,我会为你做的,或者别人可以打败我。
EDIT: 这是我根据你的问题所能做的最好的,但你应该明白了。
%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社区中获得更多的信息,请务必提供适当的输入和输出样本;)