JS 两个数组取差集
在 JavaScript 中,有时候我们需要对两个数组进行操作,比如取两个数组的交集、并集、差集等。本文将重点讨论如何在 JavaScript 中取两个数组的差集。
什么是差集
在数学中,差集指的是一个集合中有的元素,但另一个集合中没有的元素。在JavaScript中,差集就是两个数组中,一个数组中有的元素,但另一个数组中没有的元素。
假设我们有两个数组arr1
和arr2
:
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];
那么arr1
和arr2
的差集就是[1, 2]
,因为在arr1
中有1和2这两个元素,但在arr2
中不存在。
方法一:使用filter和includes方法
一种简单的方法是使用filter
方法和includes
方法。具体步骤如下:
- 遍历第一个数组。
- 对于第一个数组中的每一个元素,判断是否在第二个数组中存在。
- 如果不存在,则将这个元素保留下来。
下面是一段代码示例:
const difference = arr1.filter(item => !arr2.includes(item));
console.log(difference); // [1, 2]
在这段代码中,我们首先使用filter
方法遍历arr1
数组,然后对于每个元素,使用includes
方法判断是否在arr2
中存在。如果不存在,则保留这个元素,最终得到的difference
就是[1, 2]
。
方法二:使用Set对象
另一种方法是使用ES6中新增的Set
对象。Set
对象是一种集合,它只能存储唯一的值,不会有重复。我们可以利用Set
对象的特性来取差集。
具体步骤如下:
- 将第二个数组转换成一个
Set
对象。 - 遍历第一个数组,对于每个元素,判断是否存在于第二个数组的
Set
对象中。 - 如果不存在,则将这个元素保存下来。
下面是使用Set
对象的代码示例:
const set2 = new Set(arr2);
const difference = arr1.filter(item => !set2.has(item));
console.log(difference); // [1, 2]
在这段代码中,我们首先将arr2
数组转换成一个Set
对象set2
,然后遍历arr1
数组,对于每个元素,使用has
方法判断是否在set2
中存在。最终得到的difference
也是[1, 2]
。
总结
本文介绍了两种方法在JavaScript中取两个数组的差集。第一种方法使用filter
和includes
方法,遍历第一个数组,判断每个元素是否在第二个数组中。第二种方法使用Set
对象,将第二个数组转换成Set
对象,然后遍历第一个数组,判断每个元素是否在Set
对象中存在。无论采用哪种方法,都可以方便地取得两个数组的差集。