如何使用表达式来减少对象数组

How can I use expressions to reduce array of objects

我正在创建一个流程,该流程在触发器激活时向用户发送提示。

用户选择一个响应,然后流在适当的通道中发送一条消息。提示项来自列表频道操作。我可以使用 body('ListChannels')?['value] 来解析响应。响应是一个数组,每个对象看起来像:

{
  "id":"",
  "displayName":"General",
  "description":"Used to test in-development features",
  "email":"",
  "webUrl":""
}

我想 reduce 每个对象仅指向 displayName 键,并将结果用作下一个操作的输入,这是该操作可接受的输入: ["General", "Channel2", "Channel3"]

有没有一种方法可以使用提供的 expressions/actions 将其转换为电力自动化?我还需要使用响应来查找相应的数组条目 "id" 以向该频道发送消息。

一种可能性是使用循环和控制语句来执行 'reduce' 和 'lookup' 操作:

For reduce: Initialize variable(s) (array) first and push the lookup value to the array(s):

由于下一步操作的输入需要用户可读的选项,我们必须使用频道名称。

For lookup: Loop through the original object array and compare each object channel name to your query value:

用户响应存储在 selectedResponse 中。我们可以遍历原始列表通道响应中的每个项目,并将其与每个对象通道名称进行比较。如果有比赛。我们可以使用当前项目 id 作为 "Post your own adaptive card" 操作的参数。

Result: