如何在 Dataweave 1.0 的过滤器、地图等中跳出循环?
How to break out of loop in filter, map etc in dataweave 1.0?
我认为这个问题不言自明。如何打破 map、filter 和其他此类循环运算符中的循环? (或者至少是实现此目的的解决方法)
谢谢
您将无法使用 map
、filter
和 reduce
等任何内置函数来完成此操作,因此您只能使用递归。要模拟中断,您的基本案例将需要检查数组的长度以及中断条件。这是一个接受数组和 returns 包含每个值的数组的示例,直到达到偶数:
%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])
Returns:
[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])
我认为这个问题不言自明。如何打破 map、filter 和其他此类循环运算符中的循环? (或者至少是实现此目的的解决方法)
谢谢
您将无法使用 map
、filter
和 reduce
等任何内置函数来完成此操作,因此您只能使用递归。要模拟中断,您的基本案例将需要检查数组的长度以及中断条件。这是一个接受数组和 returns 包含每个值的数组的示例,直到达到偶数:
%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])
Returns:
[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])