当前位置: 首页 > article >正文

ES6 Set 与 Map 数据结构(复习/面试)

目录

1. Set

2. WeakSet

3. Map

4. WeakMap


1. Set

  • 特性:唯一,不重复,成员值不限

Set 的原理是:如果传入的数组,那么它会遍历数组, 传入的是字符串,字符串会被自动拆分为单个字符 ,并逐个添加到 Set

  • 去重写法 : 
    [...new Set(array)]  去重数组
    [...new Set("aabbcc")]  //['a','b','c']  
    [...new Set("aabbcc")].join('')  //'abc' 去重字符串 
  • Set实例的属性/方法
new Set()创建新集合
add()向集合中添加新元素
clear()  从集合中移除所有元素。
delete()  从集合中移除元素。
entries()    返回包含 [value, value] 对的迭代器(集合中每个元素既是键也是值)。
forEach()为每个元素调用回调函数。
has()  如果集合中存在某个值,则返回 true。
keys() 与 values() 方法相同。
size 返回集合中元素的数量。
values()  返回包含集合中值的迭代器。
  • Array.from()方法 可以将Set 结构转为数组

去重写法  Array.from(new Set(1,1,2,2)) //[1,2]
  • 注意点: Set的遍历顺序是插入顺序

  • 思考: 使用Set 如何实现数据并集(通过扩展运算符)、交集(通过filter过滤,条件has方法)、差集 (通过filter过滤,条件has方法取反)

2. WeakSet

  • 特性:唯一,不重复,成员值只能是“对象”(引用类型),不能是基本数据类型。

    • (弱引用=》垃圾回收机制会自动回收所占内存)

    const weakSet1 = new WeakSet();
    weakSet1.add([1, 2, 3]); // 匿名数组
    console.log(weakSet1); // WeakSet {{...}},但数组可能随时被回收
    ​
    const weakSet2 = new WeakSet();
    const a = [1, 2, 3];
    weakSet2.add(a); // 数组被变量 a 引用
    console.log(weakSet2); // WeakSet {{...}},数组不会被回收
    ​
    // 如果变量 a 被销毁或重新赋值
    a = null;
    console.log(weakSet2); // WeakSet 中的数组可能被回收
  • WeakSet 实例的属性/方法

add(xx), delete(xx), has(xx), 无size方法,不支持遍历

  • 使用场景:适合临时存放一组对象

3. Map

  • 特性:键值对(Hash)的数据结构,键可以是任何数据类型 ,唯一值,值可以重复

知识普及:任何具有iterator接口,且每个成员都是一个双元素的数组的数据结构,够可以当做Map构造函数的参数,这就是说,Set和Map都可以用来生成新的Map,就是说把Set对象和Map对象,当做Map构造函数的参数,结果都会生成新的Map对象

  • Map实例的属性/方法

new Map()创建新的 Map集合
clear()移除 Map 中的所有元素。
delete()  通过键移除 Map 中的元素。
entries()    返回包含 Map 中 [键, 值] 对的迭代器对象。
forEach()为 Map 中的每个键/值对调用回调函数。
get()获取 Map 中某个键的值
set() Map 中的某个键设置值。
groupBy()根据回调函数返回的值对对象元素进行分组。
has()  如果 Map 中存在某个键,则返回 true。
keys() 返回包含 Map 中键的迭代器对象
size 返回集合中元素的数量。
values()  返回包含集合中值的迭代器。

与其他数据结构的相互转换

  • Map转为 数组 使用扩展运算法

  • 数组转为 Map 将数组传入Map构造函数

  • Map转为 对象

    • 所有Map 的键都是字符串,通过新建一个对象,for..of 遍历,添加到对象内

    • 如果有非字符串的键名,需要先转成字符串,再进行上面的操作

  • 对象转为 Map 使用Object.entries()

    let obj = {'a':1} 
    let map = new Map(Object.entries(obj))
  • Map转为 JSON

    • 情况1:键名都是字符串,可优先存为对象JSON,先将Map转为 对象,再通过JSON.stringify()方法

    • 情况2:键名有非字符串,可优先存为数组JSON,先将Map转为 数组(扩展运算符),再通过JSON.stringify()方法

  • JSON转为 Map

    • 通过JSON.parse()解构,再使用Object.entries()

4. WeakMap

  • 特性:(弱引用类型)

    • 没有遍历方法(无keys( ),values( ),entries( )),没有size属性

    • 无法清空,无clear 方法

  • WeakMap实例的属性/方法

    • get( ),set( ),has( ),delete( )

  • 应用场景:

    • 使用DOM节点作为 键名

    • 部署私有属性


http://www.kler.cn/a/558901.html

相关文章:

  • 3DGS(三维高斯散射)算法原理介绍
  • 【练习】【子集NO.1】力扣78. 子集
  • 微软发布Majorana 1芯片,开启量子计算新路径
  • OpenCV 4.10.0 图像处理基础入门教程
  • 【数据结构-并查集】力扣1722. 执行交换操作后的最小汉明距离
  • 微信小程序-组件复用机制behaviors
  • QT随记-菜单栏
  • 使用spring-boot-starter-test做单元测试简单示例
  • uniapp实现app的pdf预览
  • 言出法随!鹰谷电子实验记录本项目模块全面接入 DeepSeek
  • MATLAB学习之旅:数据建模与仿真应用
  • 数据结构:基数排序(c++实现)
  • 网络安全 | 信息安全管理体系(ISMS)
  • 基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统
  • uniapp 九宫格抽奖
  • QEMU源码全解析 —— 内存虚拟化(18)
  • NavVis VLX三维扫描:高层建筑数字化的革新力量【沪敖3D】
  • 【量化策略】均值回归策略
  • 基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
  • QString是 Qt 框架中的一个核心类,基本用法使用:创建、字符串拼接、截取、查找、替换、分割、大小写转换、比较。