文章目录
- 实现思路
- 使用场景
- 考察的知识点
- 实现方法
- 方法 1:使用 `filter` 和 `includes`
- 方法 2:使用 `Set` 和 `filter`
- 方法 3:使用 `reduce`
- 方法 4:使用第三方库
数组的交集是指两个数组中都包含的元素集合。即在两个数组中都存在的元素所组成的新的数组。
实现思路
要找出两个数组的交集,可以使用以下方法:
- 使用
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]