是否可以根据另一个阵列过滤Logic应用中的阵列?

时间:2017-01-11 13:32:01

标签: azure azure-logic-apps

在我正在开发的逻辑应用程序中,我希望数组A中的对象不存在数组B中的实体。这些数组具有以下结构:

阵列A.

[{"ExternalId": 1}, {"ExternalId": 2}]

阵列B.

[{"Id": 2}]

除了id之外,这些数组还包含更多属性,为简单起见,我将不再介绍。

我想要的结果是让阵列A基于ExternalId过滤掉,这在阵列B中是不可用的,所以这应该导致以下过滤后的数组:

[{"ExternalId": 1}]

我尝试使用FilterArray操作,但我不知道如何对此进行建模。根据{{​​3}},有一个@contains函数,但我无法以正确的方式构造它。

是否可以这样做?是否有另一种方法可以在Azure Logic Apps中实现此结果?

1 个答案:

答案 0 :(得分:4)

是的,我认为这还不可能 - 你可以获得它的唯一方法如下,但现在可能更容易在Azure函数内运行。

  1. 编写一个只包含“ExternalId”值的新数组(这样你可以在过滤器中使用@contains())
    1. 使用数组B中的每个项目创建一个foreach循环
    2. 在foreach循环内添加一个包含{ "body": "@item()['ExternalId']" }
    3. 的作品
  2. 在foreach循环之外,您现在可以执行@body('Compose')并且您有一个ExternalId值数组(在本例中为[ 1 ])。

    现在在数组A上创建过滤器数组,过滤条件是@contains(body('Compose'),item())

    将来我们计划支持@select()@ where()@ orderby()类型构造,这将使这更容易,以及地图数组操作 - 但仍在设计中。现在你可以选择上面的方法或调用Azure函数来处理javascript / C#