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