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

How to Identify last element in an Array in Dataweave

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

    %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","XYZ", "DKJL"]
---
arr[-1 to 0] reduce ("custom($($)); || " ++ $$)

产出

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