Как выйти из цикла в filter, map и т.д. В dataweave 1.0?

#mule #dataweave #mule-esb

#mule #dataweave #mule-esb

Вопрос:

Я думаю, что вопрос говорит сам за себя. Как выйти из цикла в map, filter и других подобных операторах, которые зацикливаются? (или, по крайней мере, обходной путь для достижения этого)

Спасибо

Ответ №1:

Вы не сможете сделать это с помощью каких-либо встроенных функций, таких как map , filter и reduce , так что это оставляет вас с рекурсией. Чтобы эмулировать разрыв, в вашем базовом варианте потребуется проверить массив на длину, а также на условие разрыва. Вот пример, который принимает массив и возвращает массив, содержащий каждое значение, пока не будет достигнуто четное число:

 %dw 1.0
output application/json

%function breakCondition(n)
  mod(n, 2) == 0

%function untilEven(arr, out=[])
  out when (isEmpty(arr) or breakCondition(arr[0]))
    otherwise untilEven(arr[1 to -1], arr[0])
---
untilEven([3, 5, 1, 6, 7, 9])
  

ВОЗВРАТ:

 [3, 5, 1]
  

Для дальнейшего использования, вот тот же пример в 2.0:

 %dw 2.0
output application/json

fun breakCondition(n) =
  mod(n, 2) == 0

fun untilEven(arr, out=[]) =
  if (isEmpty(arr) or breakCondition(arr[0]))
    out
  else 
    untilEven(arr[1 to -1], arr[0])
---
untilEven([3, 5, 1, 6, 7, 9])
  

Комментарии:

1. Я упомянул в своем вопросе dataweave 1.0.

2. Та же концепция, но будет соответствующим образом скорректирована.