寻求DataWeave多变量负载过滤优化方案:支持多值与空值忽略
简洁可扩展的DataWeave过滤方案
优化后的代码实现
output application/json // 定义过滤参数:null表示忽略该条件,数组表示多值匹配,单值直接写值 var filters = { brandCode: 262, isDealer: null, locationId: [1,2], statusCode: 102, status: "Close" } payload filter ((item) -> // 遍历所有过滤规则,仅对非null的条件做校验 filters pluck ((filterVal, filterKey) -> if (filterVal != null) { // 兼容多值(数组)和单值匹配逻辑 typeOf(filterVal) == "Array" ? filterVal contains item[filterKey] : item[filterKey] == filterVal } else true // 过滤值为null时,自动跳过该条件 ) every ($ == true) // 所有生效的过滤条件必须同时满足 )
方案优势
- 可扩展性极强:新增过滤条件只需在
filters对象中添加键值对,无需修改核心过滤逻辑,彻底解决新增条件导致的逻辑复杂度爆炸问题 - 自动忽略空条件:只要过滤参数的值为
null,该条件会被自动跳过,无需手动写分支判断 - 支持多值匹配:通过数组形式可以实现同一字段的多值过滤(比如
locationId: [1,2]会匹配所有locationId为1或2的条目) - 逻辑清晰易维护:避免了原代码中大量嵌套
or/and的混乱结构,每个过滤条件独立判断,可读性更高
适配原Payload的说明
针对你提供的输入Payload,若需要对原有字段(如brandCode、isDealer)进行过滤,只需调整filters对象中的对应值即可。例如:
- 仅过滤
brandCode=101:设置filters.brandCode = 101,其余参数设为null - 同时过滤
brandCode=101和isDealer=true:设置filters.brandCode = 101,filters.isDealer = true
内容的提问来源于stack exchange,提问作者obc
相关产品推荐
相关产品推荐

