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

问题描述 投票:1回答:1

我的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"。

mule dataweave
1个回答
2
投票

不,你不能访问任何索引,这里是文档中的 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}}

正如你所理解的那样,你需要添加一个条件来区分不同的项目 FromTo.

如果我以后有时间,我会为你做的,或者别人可以打败我。

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社区中获得更多的信息,请务必提供适当的输入和输出样本;)

© www.soinside.com 2019 - 2024. All rights reserved.