如何在Dataweave 1.0中的过滤器,地图等中打破循环?

时间:2019-04-03 02:18:47

标签: mule dataweave mule-esb

我认为这个问题很容易解释。如何突破map,filter和其他此类循环运算符的循环? (或者至少是一种解决方法)

谢谢

1 个答案:

答案 0 :(得分:3)

您将无法使用mapfilterreduce之类的任何内置函数来完成此操作,因此您将需要进行递归操作。要模拟中断,您的基本情况将需要检查数组的长度以及中断条件。这是一个接收数组并返回包含每个值的数组,直到达到偶数的示例:

%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])