本文介绍一种高效方法,利用 set 构建对象 id 的哈希查找表,再通过 filter 快速筛选出数组中未在对象中出现的 id 值,适用于中大型数据集,时间复杂度从 o(n×m) 优化至 o(n+m)。
在实际开发中,我们常需比对两类数据:一类是结构化对象数组(如带 id 字段的地点列表),另一类是纯数字 ID 数组。目标是快速定位「存在于 ID 数组中,但未在对象数组的 id 字段中出现」的值——即差集元素。
最直观的做法可能是嵌套循环或多次调用 Array.prototype.find() / includes(),但这类方案在数据量增大时性能急剧下降(时间复杂度为 O(n × m))。更优解是借助 JavaScript 的 Set 实现 O(1) 平均查找时间的哈希映射。
核心思路分两步:
以下是完整可运行示例:
const itemList = [
{ id: 60, itemName: 'Main Location - 1100 Superior Road - Cleveland' },
{ id: 1456, itemName: 'Third Location - 107, West 20th Street, Manhattan - New York' }
];
const idList = [60, 1453, 1456];
// 步骤1:创建基于 id 的 Set 查找表(去重且高效)
const idLookup = new Set(itemList.map(({ id }) => id));
// 步骤2:筛选出不在对象列表中的 ID
const listOfNonMatchingIds = idList.filter(id => !idLookup.has(id));
console.log(listOfNonMatchingIds); // [1453]✅ 优势说明:
⚠️ 注意事项:
此模式不仅适用
