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

如何比较并操作JSON对象:按规则合并data1与data2数组数据

解决方案:合并并转换JSON对象数据

实现思路

  1. 提取data1.details中已有的comp_id,用Set存储以快速判断匹配情况
  2. 遍历data2,筛选出未匹配的项,将其结构转换为data1.details的格式
  3. 合并原details数组和转换后的新项,重命名字段为declaration_details,同时保留data1的其他原有字段

代码实现

// 原始数据
let data1 = {
  "id": "111",
  "entity_id": "222",
  "text_id": "333",
  "details": [{
    "value": 1000,
    "comp_id": "444",
    "CompName": "driving"
  }]
};

let data2 = [{
  "id": "111",
  "text_id": "333",
  "criteria_type": "TXT",
  "value": 1000,
  "comp": {
    "id": "444",
    "name": "driving"
  }
}, {
  "id": "222",
  "text_id": "444",
  "criteria_type": "TXT",
  "value": 2000,
  "comp": {
    "id": "555",
    "name": "swiming"
  }
}];

// 1. 提取已有的comp_id集合
const existingCompIds = new Set(data1.details.map(item => item.comp_id));

// 2. 筛选data2中未匹配的项并转换格式
const newItems = data2.filter(item => !existingCompIds.has(item.comp.id))
  .map(item => ({
    value: item.value,
    comp_id: item.comp.id,
    CompName: item.comp.name
  }));

// 3. 合并数组并构造结果对象
const result = {
  ...data1,
  declaration_details: [...data1.details, ...newItems]
};

// 删除原details字段
delete result.details;

console.log(JSON.stringify(result, null, 2));

代码解释

  • 提取已有ID集合:用Set存储data1.details里的comp_id,判断是否存在的时间复杂度为O(1),比数组遍历更高效
  • 筛选并转换新项:用filter找出data2中不在已有集合里的项,再用map把结构转换成和data1.details一致的格式
  • 构造结果对象:用扩展运算符...复制data1的原有字段,添加合并后的declaration_details数组,最后删除原来的details字段

运行代码后会输出符合需求的目标JSON对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:56:12