4-集合

举报
林太白 发表于 2025/11/06 17:49:01 2025/11/06
【摘要】 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 两个数组的交集

基本特性

  1. 无序性:集合中的元素没有顺序,无法通过索引访问。
  2. 唯一性:集合中每个元素都是唯一的,重复元素会被自动去除。
  3. 快速查找:可以快速判断某个元素是否存在。

基本操作

以下是 ES6 中 Set 类型常用的操作:

  1. 去重:集合可以自动去除重复的元素。
  2. 判断某元素是否存在:通过 .has() 方法判断某个元素是否在集合中。
  3. 交集、差集:可以利用集合的特性方便地进行集合运算。

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. 判断元素是否在集合中

通过 Sethas() 方法,可以快速判断某个元素是否在集合中:

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 中,从而得到 set1set2 的差集。

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]
  • 解析:通过展开运算符将两个集合的元素合并,再创建新的集合,这样就自动去除重复元素,实现了并集操作。

使用场景

  1. 去重操作
    • 当我们需要移除数组中的重复元素时,Set 是一个非常有效的工具。例如,处理用户输入的唯一标识符、产品编号等。
  2. 集合运算
    • 如求交集、差集、并集等。常常应用于数据分析、推荐系统、权限控制等领域。
  3. 快速查找
    • 当需要频繁判断元素是否存在时,Set 提供了高效的 has() 方法,适用于高性能场景。
  4. 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。