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

Mule 在dataweave 2.0中访问reduce函数中的项索引,mule,dataweave,Mule,Dataweave,我的DataWeave代码如下所示:- Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse} 是否有方法检查item对象的索引。我需要根据item对象的索引执行条件设置 例如: Item=数据[0]执行此操作 Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse} Result: Data reduce (ite

我的DataWeave代码如下所示:-

Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}
是否有方法检查item对象的索引。我需要根据item对象的索引执行条件设置

例如: Item=数据[0]执行此操作

Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}
Result: Data reduce (item,ls={}) -> ls ++ To: {dev: item.warehouse}
项目=数据[1]执行此操作

Result: Data reduce (item,ls={}) -> ls ++ From: {dev: item.warehouse}
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

您可以通过修改Accumulator的结构来自己计算项目:
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社区,请始终提供适当的转换示例输入和输出;)

我已经更新了原始代码,如果你帮助我的条件,这将是伟大的提供输入和输出样本数据请,也许与算法的解释。