javascript实现数组交集推荐filter+includes组合,先转set提升查找效率,再filter筛选并可选set去重;对象数组需自定义key匹配逻辑。

JavaScript 中实现两个数组的交集,核心思路是:找出同时存在于两个数组中的元素(去重后)。原生 API 没有直接叫 intersection 的方法,但可以用 filter + includes 组合高效完成,兼顾可读性和兼容性。
基础写法:filter + includes(推荐)
适用于大多数场景,语义清晰、兼容性好(支持 IE9+),且自动去重(取决于输入是否含重复元素;如需严格去重,后续再用 Set 处理)。
- 先用
Set转换第二个数组,提升includes查找效率(尤其大数组) - 对第一个数组调用
filter,保留那些在第二个数组Set中存在的元素 - 最后可选地用
[...new Set(...)]去重,避免结果中出现重复项
示例:
const arr1 = [1, 2, 2, 3];const arr2 = [2, 3, 4, 5];
const intersection = [...new Set(arr1)].filter(item => new Set(arr2).has(item));
// → [2, 3]
一行简洁版(含自动去重)
如果两个数组本身不含重复,或你希望结果天然无重,可直接基于 Set 构造:
更进一步压缩(适合工具函数封装):
const intersect = (a, b) => [...new Set(a)].filter(x => new Set(b).has(x));处理对象数组的交集
原生方法只比较引用或原始值。若数组元素是对象,需定义“相等”的逻辑(比如按某个 id 字段匹配):
- 用
filter遍历一个数组 - 用
some在另一个数组中查找满足条件的对象 - 例如按
id字段求交集:
const users2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const intersectionBy = (arr1, arr2, key) =>
arr1.filter(a => arr2.some(b => a[key] === b[key]));
intersectionBy(users1, users2, 'id'); // → [{id: 2, name: 'Bob'}]
性能注意点
大数据量时,反复调用 arr2.includes() 是 O(n×m);换成 Set 后查找降为 O(1),整体变为 O(n+m):
- 务必把被查数组转成
Set再调用has() - 避免在
filter回调里重复创建Set(应提至外部) - 若数组极大且内存敏感,可考虑排序后双指针法,但通常不必要
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











