Set 的妙用
题目
在这个题目中,我们将展示如何使用 Set 来求两个数组的并集、交集和差集,同时确保结果中没有重复项。
const arr1 = [33, 22, 55, 33, 11, 33, 5];
const arr2 = [22, 55, 77, 88, 88, 99, 99];
// 求交集
const cross = [...new Set(arr1.filter((item) => arr2.includes(item)))];
console.log(cross); // [22, 55]
// 求并集
const union = [...new Set([...arr1, ...arr2])];
console.log(union); // [33, 22, 55, 11, 5, 77, 88, 99]
// 求差集
const diff = union.filter((item) => !cross.includes(item));
console.log(diff); // [33, 11, 5, 77, 88, 99]
在上述代码中,我们使用了 Set 数据结构来处理数组的并集、交集和差集。让我们逐步解释这些操作:
-
求交集:我们使用
arr1.filter((item) => arr2.includes(item))
来筛选出在arr1
中同时存在于arr2
中的元素,然后通过[...new Set(...)]
将结果转换为 Set,并使用扩展运算符...
将 Set 转换为数组。最终得到的结果就是两个数组的交集。 -
求并集:我们使用
[...new Set([...arr1, ...arr2])]
将两个数组合并为一个新数组,并通过 Set 去除重复项。最终得到的结果就是两个数组的并集。 -
求差集:我们通过
union.filter((item) => !cross.includes(item))
过滤出在并集中存在,但不在交集中的元素,得到的结果就是两个数组的差集。
通过利用 Set 的特性,我们可以方便地进行数组的并集、交集和差集运算,并确保结果中没有重复项。