如何简化DataWeave中基于嵌套数组条件的对象过滤逻辑?
DataWeave 简洁实现嵌套数组对象过滤
需求很明确:移除所有包含任意isDeleted为true的hobby的用户对象,只保留那些所有hobby都未被标记为删除的用户。
输入示例
var inputMessage = [ { "name": "ben", "lastName": "TEST1", "hobby": [ { id: 1, name: "football", isDeleted: false }, { id: 2, name: "hockey", isDeleted: false } ] }, { "name": "Bart", "lastName": "TEST2", "hobby": [ { id: 1, name: "football", isDeleted: true }, { id: 2, name: "hockey", isDeleted: false } ] } ]
期望输出
[ { "name": "ben", "lastName": "TEST1", "hobby": [ { "id": 1, "name": "football", "isDeleted": false }, { "id": 2, "name": "hockey", "isDeleted": false } ] } ]
简洁实现方案
原代码通过标记再过滤的方式有点绕,其实用filter结合every就能一步到位:
output application/json --- inputMessage filter ($.hobby every !$.isDeleted)
代码解释
filter用来遍历并筛选用户数组,只留下满足条件的元素$.hobby every !$.isDeleted是核心判断逻辑:检查当前用户的所有hobby,确保每一个的isDeleted都不是true——只要有一个hobby被标记为删除,这个用户就会被过滤掉。
这种写法直接对应需求逻辑,比原实现简洁得多,可读性也更强。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

