js 两个数组的交集

js 两个数组的交集

js 两个数组的交集

在实际的前端开发工作中,经常会遇到需要对两个数组进行操作的情况,其中一个常见的需求就是求两个数组的交集。在 JavaScript 中,我们可以通过多种方法来实现这个功能,本文将详细介绍几种常用的方法,并且给出示例代码和运行结果。

方法一:使用双重循环遍历数组

最简单粗暴的方法就是使用双重循环来遍历两个数组,在嵌套循环中判断是否有相同的元素,如果有则将其记录下来。

function intersect(arr1, arr2) {
    let result = [];
    for (let i = 0; i < arr1.length; i++) {
        for (let j = 0; j < arr2.length; j++) {
            if (arr1[i] === arr2[j]) {
                result.push(arr1[i]);
                break;
            }
        }
    }
    return result;
}

let arr1 = [1, 2, 3, 4, 5];
let arr2 = [3, 4, 5, 6, 7];
console.log(intersect(arr1, arr2)); // [3, 4, 5]

上面的代码定义了一个 intersect 函数,接收两个数组作为参数,返回它们的交集。在示例中,数组 arr1arr2 分别为 [1, 2, 3, 4, 5][3, 4, 5, 6, 7],调用 intersect 函数得到的结果为 [3, 4, 5]

方法二:使用 Set 数据结构

ES6 中引入了新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。我们可以先将一个数组转换为 Set,然后利用 filter 方法过滤出另一个数组中也包含的元素。

function intersect(arr1, arr2) {
    let set1 = new Set(arr1);
    let set2 = new Set(arr2);

    return Array.from(new Set([...set1].filter(x => set2.has(x)));
}

let arr1 = [1, 2, 3, 4, 5];
let arr2 = [3, 4, 5, 6, 7];
console.log(intersect(arr1, arr2)); // [3, 4, 5]

上面的代码中,我们首先将数组 arr1arr2 分别转换为 Set 类型的 set1set2,然后使用 filter 方法和 has 方法来筛选出两个 Set 中都存在的元素,并最终返回它们的交集。

方法三:使用 reduce 方法

我们还可以使用 reduce 方法来实现求两个数组的交集,这种方法比较简洁高效。

function intersect(arr1, arr2) {
    return arr1.reduce((acc, cur) => {
        if (arr2.includes(cur) && !acc.includes(cur)) {
            acc.push(cur);
        }
        return acc;
    }, []);
}

let arr1 = [1, 2, 3, 4, 5];
let arr2 = [3, 4, 5, 6, 7];
console.log(intersect(arr1, arr2)); // [3, 4, 5]

在上面的代码中,我们使用 reduce 方法对 arr1 进行迭代,利用 includes 方法和 !acc.includes(cur) 条件来判断元素是否在 arr2 中存在,并且不重复将其添加到结果数组中。

总结

通过本文的介绍,我们学习了三种常见的方法来求两个数组的交集,分别是使用双重循环、Set 数据结构和reduce方法。在实际开发中,根据需要选择最适合的方法,提高代码的效率和可读性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程