如何在MS Flow中实现类似lodash _.find()的数组对象筛选功能?
如何在MS Flow中实现类似lodash _.find()的功能
刚好之前做过类似的需求,其实要实现和lodash _.find()一样的效果——从数组里找到第一个匹配指定条件的对象,在MS Flow里有两种实用的方法,我结合你给出的示例数组[ { item_id: '1234' }, { item_id: '4567' } ]来具体说明:
方法一:用可视化的Data Operations操作
这种方法适合喜欢可视化配置、不想写表达式的朋友:
- 第一步:添加「Filter Array」操作,将你的目标数组作为输入源
- 第二步:设置筛选规则:选择数组项的
item_id字段,运算符选「等于」,输入你要匹配的值(比如'4567') - 第三步:添加「First」操作,把「Filter Array」的输出结果作为输入。因为Filter Array会返回所有匹配的对象数组,First操作会直接提取数组的第一个元素,这就完全对应了
_.find()只取第一个匹配项的逻辑
方法二:用Workflow Definition Language表达式(更简洁)
如果想一步到位,直接用表达式就能搞定,不需要额外的操作步骤:
first(filter(你的数组变量, item()?['item_id'] == '4567'))
表达式拆解:
filter(你的数组变量, 条件):先从数组中筛选出所有符合条件的元素first(...):取筛选结果数组的第一个元素,也就是我们要的第一个匹配对象item()?['item_id']:这里的?是可选链操作符,防止数组项为空时出现报错,如果你确定数组里的每个对象都有item_id属性,也可以写成item()['item_id']或者item().item_id
空值处理(可选)
如果担心数组里没有匹配项导致报错,可以加个空值判断:
if(empty(filter(你的数组变量, item()?['item_id'] == '4567')), null, first(filter(你的数组变量, item()?['item_id'] == '4567')))
这样当没有匹配项时会返回null,而不是抛出错误。
举个实际例子,假设你把示例数组存在名为「示例数组」的变量里,要找item_id为'4567'的对象,表达式就是:
first(filter(variables('示例数组'), item()?['item_id'] == '4567'))
执行后会返回{ item_id: '4567' },完全符合你的需求。
内容的提问来源于stack exchange,提问作者kurt343
相关产品推荐
相关产品推荐

