DataWeave中基于ID对比两数组并返回Array2差异条目的实现问询
DataWeave按ID比对两个数组返回差异条目实现方案
实现思路
将基准数组(Array1)转换为以ID字段(此处为EmpNo)为键的映射表,遍历待比对数组(Array2)时可快速定位同ID的基准条目,直接对比两个对象的全量内容是否存在差异,筛选出存在差异的Array2条目即可。
实现代码
假设Array1存储在变量vars.array1,Array2存储在变量vars.array2,DataWeave 2.0代码如下:
%dw 2.0 output application/json // 构造Array1的EmpNo-条目映射表,用于快速查找 var array1Index = vars.array1 groupBy $.EmpNo mapObject ($[0]) --- vars.array2 filter (item) -> // 仅保留Array1中存在同ID、且内容不一致的Array2条目 array1Index[item.EmpNo]? and array1Index[item.EmpNo] != item
代码说明
groupBy $.EmpNo按EmpNo对Array1分组,因为EmpNo是唯一ID,每个分组仅包含1条数据mapObject ($[0])将分组结果转换为{EmpNo值: 对应条目}的映射结构,查找时间复杂度为O(1)- 遍历Array2时,先通过
array1Index[item.EmpNo]?判断Array1中是否存在同ID的条目,再通过!=直接对比两个对象的全量字段内容 - 若需要同时返回Array2中独有的条目(Array1不存在同ID),删除
array1Index[item.EmpNo]?判断条件即可
效果验证
代入提供的测试数据,运行后输出结果与预期完全一致:
[ { "EmpNo": "00016610", "Project": "ABC", "Country": "CA", "EmailAddress": "sd1@abc.com" } ]
内容的提问来源于stack exchange,提问作者user12277274
相关产品推荐
相关产品推荐

