问题描述
我有一个 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"