Как выйти из цикла в фильтре, карте и т. Д. В dataweave 1.0? - PullRequest
1 голос
/ 03 апреля 2019

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

Спасибо

1 Ответ

3 голосов
/ 03 апреля 2019

Вы не сможете делать это с какими-либо встроенными функциями, такими как 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])
...