文章目录
数组的交集是指两个数组中都包含的元素集合。即在两个数组中都存在的元素所组成的新的数组。
实现思路
要找出两个数组的交集,可以使用以下方法:
- 使用
filter
和includes
方法。 - 使用
Set
数据结构结合filter
方法。 - 使用
reduce
方法。 - 使用第三方库如 Lodash/Radash 提供的
intersection
方法。
使用场景
找出数组交集在数据处理、集合操作等场景中非常常见。例如,在数据分析中需要找出两个数据集的共同元素,或在处理用户权限时需要找出两个权限集合的交集。
考察的知识点
- JavaScript 数组操作方法(如
filter
、includes
)。 - 数据结构(如
Set
)。 - 第三方库的使用。
- 算法和时间复杂度的基本概念。
实现方法
方法 1:使用 filter
和 includes
/**
* 找出两个数组的交集
* @param {Array} arr1 - 第一个数组
* @param {Array} arr2 - 第二个数组
* @return {Array} - 两个数组的交集
*/
function intersection(arr1, arr2) {
return arr1.filter((item) => arr2.includes(item));
}
// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]
方法 2:使用 Set
和 filter
/**
* 找出两个数组的交集
* @param {Array} arr1 - 第一个数组
* @param {Array} arr2 - 第二个数组
* @return {Array} - 两个数组的交集
*/
function intersection(arr1, arr2) {
let set2 = new Set(arr2);
return arr1.filter((item) => set2.has(item));
}
// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]
方法 3:使用 reduce
/**
* 找出两个数组的交集
* @param {Array} arr1 - 第一个数组
* @param {Array} arr2 - 第二个数组
* @return {Array} - 两个数组的交集
*/
function intersection(arr1, arr2) {
return arr1.reduce((acc, curr) => {
if (arr2.includes(curr)) acc.push(curr);
return acc;
}, []);
}
// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(intersection(array1, array2)); // 输出: [3, 4, 5]
方法 4:使用第三方库
// 二选一
const _ = require("lodash"); // lodash
import { intersects } from "radash"; // radash
// 测试用例
let array1 = [1, 2, 3, 4, 5];
let array2 = [3, 4, 5, 6, 7];
console.log(_.intersection(array1, array2)); // lodash 输出: [3, 4, 5]
console.log(intersects(array1, array2)); // radash 输出: [3, 4, 5]