4-集合
【摘要】 4-集合
4-集合
认识
集合(Set) 是一种无序且元素唯一的数据结构,可以进行元素的添加、删除、查询等操作。
在 JavaScript 中,集合在 ES6 中引入,Set 提供了非常简便的 API 来进行常见的集合操作,如去重、判断元素是否存在、求交集等。
适用于需要去重、查找和集合运算的场景。
集合在数据处理、算法实现中非常有用,尤其是在处理大量数据时,能够提高效率。
JS实现
// 去重
const arr = [1, 1, 2, 2]
const arr2 = [...new Set(arr)]
// 判断元素是否在集合中
const set = new Set(arr)
const has = set.has(3) // false
// 求交集
const set2 = new Set([2, 3])
const set3 = new Set([...set].filter(item => set2.has(item)))
使用场景
- 场景一:求交集、差集
LeetCode题目
349 两个数组的交集
基本特性
- 无序性:集合中的元素没有顺序,无法通过索引访问。
- 唯一性:集合中每个元素都是唯一的,重复元素会被自动去除。
- 快速查找:可以快速判断某个元素是否存在。
基本操作
以下是 ES6 中 Set 类型常用的操作:
- 去重:集合可以自动去除重复的元素。
- 判断某元素是否存在:通过
.has()方法判断某个元素是否在集合中。 - 交集、差集:可以利用集合的特性方便地进行集合运算。
1. 去重操作
在 JavaScript 中,利用 Set 可以轻松地去除数组中的重复元素:
javascriptCopy Code// 去重
const arr = [1, 1, 2, 2];
const arr2 = [...new Set(arr)];
console.log(arr2); // 输出: [1, 2]
- 解析:
new Set(arr)创建了一个包含唯一元素的集合,通过...扩展运算符再将其转换回数组。
2. 判断元素是否在集合中
通过 Set 的 has() 方法,可以快速判断某个元素是否在集合中:
javascriptCopy Codeconst set = new Set([1, 2, 3]);
const has = set.has(3); // true
const notHas = set.has(4); // false
console.log(has); // 输出: true
console.log(notHas); // 输出: false
- 解析:
has()返回一个布尔值,表示该元素是否存在于集合中。
3. 求交集
可以通过集合的 has() 方法来实现两个集合的交集:
javascriptCopy Code// 求交集
const set1 = new Set([1, 2, 3]);
const set2 = new Set([2, 3, 4]);
const intersection = new Set([...set1].filter(item => set2.has(item)));
console.log([...intersection]); // 输出: [2, 3]
- 解析:首先将
set1转为数组,然后使用filter()方法筛选出同时存在于set2中的元素,最后将结果重新转为集合。
4. 求差集
求差集即返回一个集合中存在,而另一个集合中不存在的元素:
javascriptCopy Code// 求差集
const set1 = new Set([1, 2, 3]);
const set2 = new Set([2, 3, 4]);
const difference = new Set([...set1].filter(item => !set2.has(item)));
console.log([...difference]); // 输出: [1]
- 解析:
filter()通过!set2.has(item)判断元素是否不在set2中,从而得到set1和set2的差集。
5. 求并集
求并集即返回两个集合的所有元素,不重复:
javascriptCopy Code// 求并集
const set1 = new Set([1, 2, 3]);
const set2 = new Set([3, 4, 5]);
const union = new Set([...set1, ...set2]);
console.log([...union]); // 输出: [1, 2, 3, 4, 5]
- 解析:通过展开运算符将两个集合的元素合并,再创建新的集合,这样就自动去除重复元素,实现了并集操作。
使用场景
- 去重操作
- 当我们需要移除数组中的重复元素时,
Set是一个非常有效的工具。例如,处理用户输入的唯一标识符、产品编号等。
- 当我们需要移除数组中的重复元素时,
- 集合运算
- 如求交集、差集、并集等。常常应用于数据分析、推荐系统、权限控制等领域。
- 快速查找
- 当需要频繁判断元素是否存在时,
Set提供了高效的has()方法,适用于高性能场景。
- 当需要频繁判断元素是否存在时,
- LeetCode题目
- 349. 两个数组的交集:给定两个数组,返回它们的交集(即两个数组中共同出现的元素)。
javascriptCopy Code// LeetCode 349 解法
var intersection = function(nums1, nums2) {
const set1 = new Set(nums1);
const set2 = new Set(nums2);
const result = [...set1].filter(item => set2.has(item));
return result;
};
- 解析:将两个数组转为
Set,利用集合的交集特性来得到结果。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)