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

JavaScript数组匹配:遍历数组按ID查找并保留重复项需求

问题与解决方案

问题描述

初始需求

有两个数组:

array1 = [1, 2, 3]
array2 = [{id:1}, {id:1}, {id:3}]

需要获取array2中所有id存在于array1的对象数组(比如收集所有id为1的对象)。

更新后需求

当array1包含重复值时,需要结果数组的元素重复次数与array1中对应id的次数一致。例如:

let array1 = [1, 3, 3, 3]
let array2 = [{id:1}, {id:2},{id:3}]

使用filter+some的方法得到的结果是[{id:1}, {id:3}],但期望结果为[{id:1}, {id:3}, {id:3}, {id:3}]。

解决方案

针对更新后的核心需求(匹配array1的重复次数)

方法一:利用Map提升查找效率

const array1 = [1, 3, 3, 3];
const array2 = [{id:1}, {id:2},{id:3}];

// 将array2转换为id到对象的映射,快速查找
const idObjMap = new Map(array2.map(item => [item.id, item]));

// 遍历array1,收集对应id的对象,过滤掉无匹配的情况
const result = array1.map(id => idObjMap.get(id)).filter(Boolean);

console.log(result); // 输出: [{id:1}, {id:3}, {id:3}, {id:3}]

方法二:直接遍历查找(适合小数据量)

const array1 = [1, 3, 3, 3];
const array2 = [{id:1}, {id:2},{id:3}];

const result = [];
for (const id of array1) {
  const matchItem = array2.find(item => item.id === id);
  if (matchItem) {
    result.push(matchItem);
  }
}

console.log(result); // 输出期望结果

针对初始需求(收集array2中所有id在array1的对象,保留array2自身的重复)

如果只需要保留array2中所有符合id条件的对象(不管array1的重复,只看是否存在),可以用Set来快速判断:

const array1 = [1, 2, 3];
const array2 = [{id:1}, {id:1}, {id:3}];

const idSet = new Set(array1);
const result = array2.filter(item => idSet.has(item.id));

console.log(result); // 输出: [{id:1}, {id:1}, {id:3}]

内容的提问来源于stack exchange,提问作者Manas S. Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:40:19