javascript如何取出俩个数组相同的部分
时间: 2025-06-15 19:27:26 浏览: 11
### JavaScript 中获取两个数组交集的方法
#### 使用 `filter()` 和 `includes()`
对于现代浏览器支持 ES6 的环境,推荐使用简洁高效的 `filter()` 结合 `includes()` 来计算两个数组的交集:
```javascript
const array1 = [1, 2, 3, 4, 5];
const array2 = [4, 5, 6, 7, 8];
// 计算交集
const intersection = array1.filter(item => array2.includes(item));
console.log(intersection); // 输出: [4, 5]
```
这种方法利用了箭头函数和链式调用来简化代码逻辑[^3]。
#### 遍历并手动比较
另一种传统方式是通过遍历第一个数组,在第二个数组中查找是否存在相同的元素,并将匹配项存入新数组:
```javascript
function findCommonElements(arr1, arr2) {
let result = [];
for (let i = 0; i < arr1.length; i++) {
if (arr2.indexOf(arr1[i]) !== -1 && !result.includes(arr1[i])) {
result.push(arr1[i]);
}
}
return result;
}
var a = [1, 2], b = [1, 2, 3];
console.log(findCommonElements(a, b)); // 输出: [1, 2]
```
此方法适用于需要兼容旧版浏览器或特定场景下的需求[^1]。
#### 利用 Set 数据结构优化性能
当处理较大规模的数据时,可以考虑先将其中一个数组转换成 `Set` 对象以提高查询效率:
```javascript
function getIntersectionWithSets(arrayA, arrayB) {
const setB = new Set(arrayB);
return [...new Set(arrayA)].filter(x => setB.has(x));
}
const largeArray1 = Array.from({ length: 1e6 }, (_, i) => Math.floor(Math.random() * 1e5));
const largeArray2 = Array.from({ length: 1e6 }, (_, i) => Math.floor(Math.random() * 1e5));
console.time('intersection');
getIntersectionWithSets(largeArray1, largeArray2);
console.timeEnd('intersection');
```
这种方式不仅提高了算法的时间复杂度表现,还减少了重复数据的影响.
阅读全文
相关推荐














