JS 两个数组的差集
在JavaScript中,我们经常需要对数组进行操作,比如找出两个数组的交集、并集、差集等。本文将重点讨论如何求取两个数组的差集,即第一个数组中有而第二个数组中没有的元素。
方法一:使用filter方法
我们可以使用数组的filter
方法来实现两个数组的差集。具体步骤如下:
- 遍历第一个数组,对于每一个元素,判断其是否存在于第二个数组中。
- 如果不存在于第二个数组中,则保留在新数组中。
下面是一个示例代码:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [4, 5, 6, 7, 8];
const diff = arr1.filter(num => !arr2.includes(num));
console.log(diff); // [1, 2, 3]
在这段代码中,我们定义了两个数组arr1和arr2,然后使用filter
方法对arr1进行筛选,保留只存在于arr1而不存在于arr2的元素,最后将结果打印出来。运行结果为[1, 2, 3],即arr1中有而arr2中没有的元素。
方法二:使用Set数据结构
另一种方法是使用ES6新增的Set
数据结构。Set
类似于数组,但是其元素具有唯一性,不存在重复元素。我们可以先将两个数组转换为Set
,然后利用Set
的特性实现差集操作。
具体步骤如下:
- 将两个数组转换为
Set
。 - 创建一个新的
Set
,存放第一个Set
中有而第二个Set
中没有的元素。 - 将新的
Set
转换为数组。
下面是使用Set
实现差集的示例代码:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [4, 5, 6, 7, 8];
const set1 = new Set(arr1);
const set2 = new Set(arr2);
const diffSet = new Set([...set1].filter(num => !set2.has(num)));
const diff = Array.from(diffSet);
console.log(diff); // [1, 2, 3]
在这段代码中,我们先将arr1和arr2转换为Set
,然后利用Set
的特性进行差集操作,最后将结果转换为数组并打印出来。运行结果与前面的方法相同,为[1, 2, 3]。
总结
本文介绍了两种方法来求取两个数组的差集,分别是使用filter
方法和Set
数据结构。两种方法均可实现差集操作,选择哪种方法取决于个人偏好和具体需求。