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

JavaScript如何按ID匹配合并两个数据库查询返回的JSON对象

JavaScript 实现两个JSON查询结果的合并逻辑

实现思路:

  • 先将第一个查询结果中的IRB节点转换为以id为键的映射表,避免每次匹配都循环遍历数组,大幅提升查找效率
  • 遍历第二个查询结果中的知情同意书节点,通过IRBId字段从映射表中取出对应IRB数据,新增irb属性挂载到节点上即可

完整代码实现

function mergeIRBData(irbQueryResult, consentQueryResult) {
  // 构建IRB映射表
  const irbMap = new Map();
  irbQueryResult.data.IRBs.nodes.forEach(irbItem => {
    irbMap.set(irbItem.id, irbItem);
  });

  // 遍历合并数据
  return consentQueryResult.data.informedConsentForms.nodes.map(consentItem => {
    const matchedIRB = irbMap.get(consentItem.IRBId);
    // 展开运算符做浅拷贝,不修改原始查询结果
    return {
      ...consentItem,
      irb: matchedIRB ? { ...matchedIRB } : null
    };
  });
}

使用示例

// 替换为你实际从数据库查询得到的两个结果
const irbResult = {
  "data":{
    "IRBs":{
      "nodes":[
        {"id":"8","name":"Admin "},
        {"id":"9","name":"Again"}
      ]
    }
  }
};
const consentResult = {
  "data":{
    "informedConsentForms":{
      "count":3,
      "nodes":[
        {"id":"93","IRBId":"9"},
        {"id":"92","IRBId":"8"},
        {"id":"91","IRBId":"8"}
      ]
    }
  }
};

// 调用合并函数得到目标结果
const mergedResult = mergeIRBData(irbResult, consentResult);
console.log(mergedResult);

注意事项

  • 上述代码使用展开运算符做浅拷贝,不会修改原始的两个查询结果数据,如果IRB对象存在深层嵌套属性需要深拷贝,可将{ ...matchedIRB }替换为structuredClone(matchedIRB)或者自定义深拷贝逻辑
  • 没有匹配到对应IRB的节点,irb属性默认设为null,你可以根据业务需求调整为默认值,或者在遍历后过滤掉这部分节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:30:01