JS 数据结构-Set 集合 创建Set 常用Set方法

Set

  ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

  很多时候我们把Set叫做 集合,但是,Set可以是集合,集合不一定是Set。

  特性:唯一性=>不重复=>能够对数据进行去重操作。

注:集合去重,是全等匹配,===。

 

创建Set

  Set 本身是一个构造函数,调用构造函数用来生成 Set 数据结构。

    
    关键词  标识符 = new Set();
  例    let    i   = new Set();
  
  Set 函数可以接受一个数组(或类似数组的对象)作为参数,用来进行数据初始化。

      let i = new Set([1, 2, 3, 4, 4]);  会得到  set{1, 2, 3, 4,}

注:如果初始化时给的值有重复的,会自动去除。

  集合并没有字面量声明方式。

 

Set的属性

  常用的属性就一个:size   返回 Set 实例的成员总数。

  let s = new Set([1, 2, 3]);

  console.log( s.size ); // 3

 

Set的方法

  Set 实例的方法分为两大类:操作方法(用于数据操作)和遍历方法(用于遍历数据)。

  操作方法:

      add(value)    添加数据,并返回新的 Set 结构

      delete(value)   删除数据,返回一个布尔值,表示是否删除成功

      has(value)    查看是否存在某个数据,返回一个布尔值

      clear()      清除所有数据,没有返回值

复制代码
let set = new Set([1, 2, 3, 4, 4]);
// 添加数据 5
let addSet = set.add(5);
console.log(addSet); // Set(5) {1, 2, 3, 4, 5}
// 删除数据 4s
let delSet = set.delete(4);
console.log(delSet); // true
// 查看是否存在数据 4
let hasSet = set.has(4);
console.log(hasSet); // false
// 清除所有数据
set.clear();
console.log(set); // Set(0) {}
复制代码

  遍历方法:

    Set 提供了三个遍历器生成函数和一个遍历方法。

      keys()     返回一个键名的遍历器

      values()     返回一个键值的遍历器

      entries()     返回一个键值对的遍历器

      forEach()   使用回调函数遍历每个成员

复制代码
let color = new Set(["red", "green", "blue"]);
for(let item of color.keys()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.values()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.entries()){
 console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
color.forEach((item) => {
 console.log(item)
})
// red
// green
// blue
复制代码

 

与数组相关操作

  Set 转数组:

    由于扩展运算符...,内部的原理也是使用的 for-of 循环,所以也可以用于操作 Set 结构。

    例如将 Set 结构转换为数组结构:

        

let color = new Set(["red", "green", "blue"]);
let colorArr = [...color];

 

  数组去重:

    扩展运算符和 Set 结构相结合,就可以去除数组的重复成员。

      

let arr = [1,2,2,2,2,"2",24,5,6];
//step1:数组转集合
let set = new Set(arr);//已经去掉重复值,当前不是数组,而集合  Set { 1, 2, '2', 24, 5, 6 }
//step2:集合转数组
arr = [...set];//[ 1, 2, '2', 24, 5, 6 ]

 

扩展

复制代码
let num1 = new Set([1, 2, 3, 4]);
let num2 = new Set([3, 4, 5, 6]);

//并集
let union = new Set([...num1,...num2]);
console.log(union);//Set { 1, 2, 3, 4, 5, 6 }

//交集
let intersect = new Set(
    [...num1].filter(x=> num2.has(x))
)
console.log(intersect); //Set { 3, 4 }

//差集
let difference = new Set(
    [...num1].filter(x => !num2.has(x))
)
console.log(difference); //Set { 1, 2 }
复制代码

 

 

 

posted @   飞叶飞花  阅读(12811)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示