JavaScript 寻找两个数的交集

数组的交集是指两个数组中都包含的元素集合。即在两个数组中都存在的元素所组成的新的数组。

实现思路

要找出两个数组的交集,可以使用以下方法:

  • 使用 filterincludes 方法。
  • 使用 Set 数据结构结合 filter 方法。
  • 使用 reduce 方法。
  • 使用第三方库如 Lodash/Radash 提供的 intersection 方法。

使用场景

找出数组交集在数据处理、集合操作等场景中非常常见。例如,在数据分析中需要找出两个数据集的共同元素,或在处理用户权限时需要找出两个权限集合的交集。

考察的知识点

  • JavaScript 数组操作方法(如 filterincludes)。
  • 数据结构(如 Set)。
  • 第三方库的使用。
  • 算法和时间复杂度的基本概念。

实现方法

方法 1:使用 filterincludes

/**
 * 找出两个数组的交集
 * @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:使用 Setfilter

/**
 * 找出两个数组的交集
 * @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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luke Paul Na

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值