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

基于docId匹配两个集合,返回双方共有的合并文档

基于docId匹配并合并两个集合的交集文档

要实现仅保留两个集合中docId匹配的文档,并将colB中的smtp字段合并到colA的对应文档中,可按以下方式操作:

实现思路

  1. 把colB转换为以docId为键、smtp为值的Map,实现O(1)时间复杂度的快速查找
  2. 遍历colA,筛选出存在对应docId的文档,并将smtp字段合并到文档中

代码实现

// 假设UUID函数已定义
const colA = [
  { _id: UUID('8af051fd-feaa-4a81-b34f-327513210eab'), docId: '12345689', name: 'Office 1', country: 'Spain' },
  { _id: UUID('87c36ae2-5e9f-4cda-9bf5-087e96fb71b9'), docId: '12345680', name: 'Office 2', country: 'San Tomé e Príncipe' },
  { _id: UUID('7ec73cb0-657a-4a91-861c-fccf04c8c2a7'), docId: '12345688', name: 'Office 3', country: 'Canada' }
];

const colB = [
  { id: 1, docId: '12345689', name: 'Office 1', smtp: null },
  { id: 2, docId: '12345680', name: 'Office 2', smtp: 'smtp.gmail.com' },
  { id: 3, docId: '12345688', name: 'Office 3', smtp: 'smtp.office365' },
  { id: 4, docId: '12345638', name: 'Office 4', smtp: 'smtp.host.com' },
  { id: 5, docId: '12345699', name: 'Office 5', smtp: '123.321.456' },
];

// 构建colB的docId与smtp的映射关系
const bSmtpMap = new Map(colB.map(item => [item.docId, item.smtp]));

// 生成最终结果集
const result = colA
  .filter(item => bSmtpMap.has(item.docId))
  .map(item => ({ ...item, smtp: bSmtpMap.get(item.docId) }));

console.log(result);

补充说明

  • 采用Map结构替代嵌套循环,将整体时间复杂度从O(n*m)优化为O(n+m),适合处理大规模数据
  • 使用扩展运算符(...)复制原文档属性,避免修改原始集合数据
  • 最终结果仅保留两个集合中docId匹配的文档,自动合并smtp字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:40:24