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

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

代码说明

  1. groupBy $.EmpNo 按EmpNo对Array1分组,因为EmpNo是唯一ID,每个分组仅包含1条数据
  2. mapObject ($[0]) 将分组结果转换为{EmpNo值: 对应条目}的映射结构,查找时间复杂度为O(1)
  3. 遍历Array2时,先通过array1Index[item.EmpNo]?判断Array1中是否存在同ID的条目,再通过!=直接对比两个对象的全量字段内容
  4. 若需要同时返回Array2中独有的条目(Array1不存在同ID),删除array1Index[item.EmpNo]?判断条件即可

效果验证

代入提供的测试数据,运行后输出结果与预期完全一致:

[
  {
    "EmpNo": "00016610",
    "Project": "ABC",
    "Country": "CA",
    "EmailAddress": "sd1@abc.com"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:05