You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:01:22