Я новичок в DataWeave, и у меня около 20 строк.

Эти строки могут быть пустыми или иметь фактические значения.

Полезная нагрузка выглядит так:

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

Я ищу наиболее эффективный способ поместить пустую строку между тегом <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 ""

Есть ли лучшее решение, чем это?

0
Arès 29 Июл 2020 в 11:20

1 ответ

Лучший ответ

Я предполагаю, что вы используете 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. Но да, если у вас есть коллекция, joinBy будет неплохим решением.

ПРИМЕЧАНИЕ. Измените output на все, что захотите, я подозреваю, что text/plain - это то, что вам нужно. Я использовал application/dw, потому что использовал предварительный просмотр для тестирования.

2
machaval 29 Июл 2020 в 16:29
Application/dw следует использовать только для отладки. Это влияет на производительность.
 – 
aled
29 Июл 2020 в 15:41
3
Производительность обоих должна быть одинаковой, поскольку фильтр ленив, это означает, что он не повторяется 3 раза. И для меня первое решение намного понятнее, так как оно описывает решение теми же терминами, что и было описано.
 – 
machaval
29 Июл 2020 в 17:07
1
Полезно знать @machaval!
 – 
George
29 Июл 2020 в 19:23