ES6 从入门到精通 # 10:Set 集合数据类型

简介: ES6 从入门到精通 # 10:Set 集合数据类型

说明

ES6 从入门到精通系列(全23讲)学习笔记。



Set 集合

集合:表示无重复值的有序列表

let kaimo = new Set();
console.log(kaimo)


0502741e9ec0402486a2545b79edaccb.png


添加元素

let kaimo = new Set();
kaimo.add(3);
kaimo.add("1");
kaimo.add(3); 
kaimo.add([3, 1, 3])
console.log(kaimo)


34003cee0a2b44b48cb02970b2c4c85d.png


删除元素

kaimo.delete([3, 1, 3]);
console.log(kaimo)
kaimo.delete(3);
console.log(kaimo)


7d9a26db01984921a245ccd21771ac4e.png


校验某个值是否在 set 中

kaimo.has('1')


a305d3e4cbe74da0a5c8f4063c02eff7.png



访问集合的长度

kaimo.size



40a2f77213ff4372a115108df66ba49e.png



注意:forEach 的用法,这里的 val 是相等于 key 的

kaimo.forEach((val, key) => {
  console.log("val--->", val)
  console.log("key--->", key)
})


3b45f174869c4904918f000a9e981f7e.png


用扩展运算符将集合转为数组

let kaimo = new Set([3, 1, 3]);
console.log(kaimo )
let arr = [...kaimo];
console.log(arr)


76754d42b8324452b0617f21ec3475c6.png



拓展


set 中对象的引用无法被释放

let kaimo = new Set(), obj = {name: "kaimo313"};
kaimo.add(obj)
// 释放当前的资源
obj = null
console.log(kaimo);


80272a32608a42ff8841ff98910eccac.png


解决方法:使用 WeakSet

let kaimo1 = new Set(), obj1 = {name1: "kaimo313"};
kaimo1.add(obj1)
// 释放当前的资源
obj1 = null
let kaimo2 = new WeakSet(), obj2 = {name2: "kaimo313"};
kaimo2.add(obj2)
// 释放当前的资源
obj2 = null
kaimo1
kaimo2


c00a5105821140ef9800dbb1028d3e30.png


WeakSet 的特点

  1. 不能传入非对象类型的参数


2ce67f7e524e425e8bccb592401226de.png


2.不可迭代

7f6eff07c8dc4817b6c894c2d3e9ac63.png


  1. 没有 forEach()
  2. 没有 size 属性




目录
相关文章
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
175 5
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
4594 113
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
1114 113
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
355 1
|
8月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
582 1
|
5月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
9月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
428 121
|
12月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
329 2

热门文章

最新文章