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

JavaScript:遍历两个数组匹配SiteUniqueID并整合描述属性

解决方案:合并两个数组并聚合描述信息

问题背景

有两个数组:
数组1(ID列表):

['0000037_165', '0000037_62', '0000037_74', '0000037_165', ...]

数组2(带描述的对象列表):

[
 {SiteUniqueID: '0000037_165', Description: 'Description 1'},
 {SiteUniqueID: '0000037_165', Description: 'Description 2'},
 {SiteUniqueID: '0000037_62', Description: 'Description 1'},
 {SiteUniqueID: '0000037_74', Description: 'Description 1'},
 {SiteUniqueID: '0000037_165', Description: 'Description 1'},
 ...
]

需求:

  • 检查数组2中每个对象的SiteUniqueID是否存在于数组1中
  • 存在的话,将该ID和对应的描述存入新数组
  • 同一ID对应多个描述时,把描述整理成数组存储

核心解决方案

用**对象映射(Map)**高效聚合同一ID的描述,再转换为目标数组格式,代码如下:

// 将数组1转为Set,提升ID查询效率(Set.has()是O(1),比数组.includes()的O(n)更快)
const idSet = new Set(array1);

// 用Map存储每个ID对应的描述数组
const idDescMap = new Map();

// 遍历数组2,筛选并聚合符合条件的描述
array2.forEach(item => {
  const { SiteUniqueID, Description } = item;
  if (idSet.has(SiteUniqueID)) {
    // 若Map中已有该ID,追加描述;否则新建数组存储
    idDescMap.has(SiteUniqueID) 
      ? idDescMap.get(SiteUniqueID).push(Description) 
      : idDescMap.set(SiteUniqueID, [Description]);
  }
});

// 将Map转换为目标格式的数组
const result = Array.from(idDescMap.entries()).map(([SiteUniqueID, Description]) => ({
  SiteUniqueID,
  Description
}));

console.log(result);

代码说明

  1. Set优化查询:把数组1转为Set,避免大数组下重复查询的性能损耗
  2. Map聚合描述:用Map的键存储ID,值存储对应描述数组,遍历一次数组2即可完成聚合
  3. 格式转换:通过Array.from()将Map的键值对转为数组,再映射成需求的对象结构

适配重复ID场景的版本

如果需要保留数组1中重复ID的条目(比如数组1里两次出现0000037_165,结果也要对应两条),可以调整代码:

const idSet = new Set(array1);
const idDescMap = new Map();

// 先聚合所有符合条件的描述
array2.forEach(item => {
  const { SiteUniqueID, Description } = item;
  if (idSet.has(SiteUniqueID)) {
    if (!idDescMap.has(SiteUniqueID)) {
      idDescMap.set(SiteUniqueID, []);
    }
    idDescMap.get(SiteUniqueID).push(Description);
  }
});

// 遍历数组1生成结果,严格保留原数组的顺序和重复次数
const result = array1
  .filter(id => idSet.has(id))
  .map(id => ({
    SiteUniqueID: id,
    Description: [...idDescMap.get(id)] // 用扩展运算符避免原数组被意外修改
  }));

console.log(result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:35:19