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

如何用DataWeave按ID去重并优先保留returnComment为1的对象

问题描述

需要处理一个对象数组格式的Payload,移除相同id的重复对象,规则是优先保留returnComment值为1的对象(即returnComment=1优先级高于returnComment=2)。

输入Payload

[
    {
        "id": "1676431",
        "returnComment": 2
    },
    {
        "id": "1676431",
        "returnComment": 1
    },
    {
        "id": "1676431",
        "returnComment": 2
    },
    {
        "id": "3566367",
        "returnComment": 2
    },
    {
        "id": "7676559",
        "returnComment": 1
    },
    {
        "id": "7676559",
        "returnComment": 1
    }
]

预期输出

[
    {
        "id": "1676431",
        "returnComment": 1
    },
    {
        "id": "3566367",
        "returnComment": 2
    },
    {
        "id": "7676559",
        "returnComment": 1
    }
]

当前代码(存在问题)

%dw 2.0
output application/json

---
arr distinctBy $.requestId
解决方案

直接使用distinctBy无法满足优先级规则,需要先按returnComment升序排序(确保returnComment=1的对象排在同id对象的前面),再用distinctBy按id去重,即可保留优先级更高的对象。

完整DataWeave代码:

%dw 2.0
output application/json
---
arr 
    // 按returnComment升序排序,让returnComment=1的对象优先出现
    sortBy $.returnComment
    // 按id去重,保留排序后第一个出现的对象(即优先级高的)
    distinctBy $.id

逻辑说明

  1. 排序环节:通过sortBy $.returnComment将数组按returnComment从小到大排序,同一id下,returnComment=1的对象会排在returnComment=2的对象之前。
  2. 去重环节:distinctBy $.id会保留数组中第一个出现的对应id的对象,也就是排序后优先级更高的那个对象,从而实现去重+优先级保留的需求。

内容的提问来源于stack exchange,提问作者Andre S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:15:00