如果它们不为空,则连接许多字符串的最有效方法

Most efficient way to Concat Many String if they're not empty

我对 DataWeave 有点陌生,我有 20 个字符串。

这些字符串可能为空或具有实际值

有效载荷如下所示:

{
    str1 : "String 1",
    str2 : "String 2",
    str3 : "",
    str4 : "String 4",
}

我正在寻找最有效的方法来将 none 空字符串放在 <li> </li> html 标记之间,然后连接这些字符串。

所以结果应该是这样的<li> String 1 </li><li> String 2 </li><li> String 4 </li>

这是我的解决方案:

var str_arr = [
         "String 1",
         "String 2",
         "",
         "String 4",
]
---
concatenated_str:  str_arr joinBy ""

还有比这个更好的解决方案吗?

我假设您使用的是 Mule4。

有几种方法可以完成。下面的第一种方式“迭代”您的数据三次:

%dw 2.0
output application/json
var data = {
    str1 : "String 1",
    str2 : "String 2",
    str3 : "",
    str4 : "String 4",
}
---
"<li>" ++ ((data pluck $ filter not isEmpty($)) joinBy "</li><li>") ++ "</li>"

第二种方式对您的数据进行两次迭代,这将是一个更有效的解决方案:

%dw 2.0
output application/json
var data = {
    str1 : "String 1",
    str2 : "String 2",
    str3 : "",
    str4 : "String 4",
}
---
data pluck $ reduce (e,acc="") -> acc ++ "<li>$(e)</li>" default ""

注意:与仅使用组成的数组然后 运行 joinBy 相比,我为您的问题添加了完整的解决方案。但是是的,如果你有 collection joinBy 将是一个很好的解决方案。

注意:将 output 更改为您想要的任何内容,我怀疑 text/plain 是您想要的。我使用 application/dw 因为我正在使用预览来测试。