如何用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
逻辑说明
- 排序环节:通过
sortBy $.returnComment将数组按returnComment从小到大排序,同一id下,returnComment=1的对象会排在returnComment=2的对象之前。 - 去重环节:
distinctBy $.id会保留数组中第一个出现的对应id的对象,也就是排序后优先级更高的那个对象,从而实现去重+优先级保留的需求。
内容的提问来源于stack exchange,提问作者Andre S
相关产品推荐
相关产品推荐

