如何在 Dataweave 中识别数组中的最后一个元素

问题描述

我有一个 dataweave 表达式来创建自定义 String ,但我不想附加 ||到输入数组的最后一个元素。我怎样才能实现它?

    %dw 2.0
    output application/json
    var arr = ["ABC","XYZ"]
    ---
    arr  map((item,index) -> {
        index: "custom ('" ++ item ++ "'); " ++ "||"
    })

解决方法

这有帮助吗?

脚本

%dw 2.0
output application/json
var arr = ["ABC","XYZ"]
---
arr  map((item,index) -> {
    index: if((index) < (sizeOf(arr)-1)) "custom ('" ++ item ++ "'); " ++ "||" else item
})

输出

[
  {
    "index": "custom ('ABC'); ||"
  },{
    "index": "XYZ"
  }
]
,

您也可以尝试以下方法:

%dw 2.0
output application/json
import * from dw::core::Arrays
var arr = ["ABC","XYZ"]
---
take(arr,(sizeOf(arr)-1)) map (
     $ ++ "||" // do your manipulation to modify the custom entry
)

take 已记录 here

,

出于好奇,您是否将这个结果数组连接到一个字符串中?您的问题似乎表明该函数的最终目标是返回一个字符串。如果是,您可以只map然后joinBy

%dw 2.0
output application/json
var arr = ["ABC","XYZ","DKJL"]
---
arr map "custom($($));" joinBy " || "

输出

"custom(ABC); || custom(XYZ); || custom(DKJL);"

如果像 Salim 的回答一样,您不应该将最后一个值包装在自定义中,您还可以利用 reduce 的默认行为:

%dw 2.0
output application/json
var arr = ["ABC","DKJL"]
---
arr[-1 to 0] reduce ("custom($($)); || " ++ $$)

输出

"custom(ABC); || custom(XYZ); || DKJL"