Set和Map

作者: 吴晗君 | 来源:发表于2019-03-25 19:26 被阅读0次

前言

学习这些数据结构、Generator前先看遍历器iterator这一章比较好。之前Set、Map这一章看了好几遍,但是看一遍忘一遍。现在先看了iterator,再看这些就是在不断加深遍历器的印象。

Set

翻译

集合

定义

Set是一种数据结构,特点是成员唯一。在代码中,Set是一个构造函数,参数必须具备iterator接口,WeakSet一样。

字符串去重

[...new Set('ababbc')].join('') // abc

增、改

add

delete
clear

has
size

遍历

除了keys、values、entries

forEach也可以用来遍历Set结构,注意以下两点:
⚠️遍历Set得到的键名和键值是一个值。
⚠️遍历顺序就是插入顺序。

并集、交集、差集

let a = new Set([1, 2, 3])
let b = new Set([3, 4, 5])

let union = [...new Set([...a, ...b])]

let difference = [...a].filter((x) => !b.has(x))

let intersect = [...a].filter((x) => b.has(x))

在循环中同步改变原Set

1. 转成数组通过操作再转回去
2. 通过Array.form第二个参数,修改完,再转回去。

WeakSet

和Set两个区别:

  1. 成员只能是对象,添加其他会报错。
  2. 对成员对引用是弱引用,不在垃圾回收优化考虑范围内。也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存。
  3. 没有size属性
  4. 不能被遍历

因为第二点,所以导致WeakSet不能被遍历,原因是垃圾回收时间是不确定的。所以,可能不同时间遍历WeakSet的时候拿到的东西不一样,WeakMap也是一样。

应用

存储DOM节点,避免节点删除后,变量中还保留着节点对象,导致内存泄露。

Map

传统的对象的键只能是字符串。为了解决这个问题,引入了Map,Map可以是任意结构。

api

大致上语法和spi和Set没有区别,麻烦在和各种数据结构之间的转化,基本上靠的是for...of遍历或者拓展运算符。

WeakMap

和Map的区别

  1. 只接受除了null以外的对象为键名。
  2. 键名所指向的对象,不计入垃圾回收机制。

场景

WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏

api

size、forEach、clear没有

相关文章

  • ES6

    Symbol Set和Map Set Map Proxy get() set() apply() Reflect ...

  • Java Map,List,Set,String[]之间的转换

    Map和List map.values转list: Map和set map转set(主要用于迭代遍历) set转m...

  • Map 、Set&Object、Array

    1. Map和Set是什么? 2. Map和Set与Object和Array有什么区别,为何引入Map和Set? ...

  • 面试题解答

    Set 和Map 的方法 Set sizeaddforeachhasdeleteclear Map gethass...

  • java开发工程常用的数据结构(集合)

    List Map Set list,set,map对比 总结: Vector和ArrayList vector是线...

  • ES6新增Map和Set数据类型

    Map和Set Map 和 Set 是 ES6 标准新增的数据类型 Map JavaScript的对象(Objec...

  • Map和Set

    Map:一组键值对的结构,具有极快查找速度有has(判断是否有该键值对)get(得到对应键值)set(设置键值对)...

  • Set和Map

    Set和Map Set实例属性Set.prototype.constructor 构造函数,默认SetSet.pr...

  • Set和Map

  • Map和Set

    Map Map是一组键值对的结构,具有极快的查找速度。 初始化Map方法: 一个key只能对应一个value,所以...

网友评论

      本文标题:Set和Map

      本文链接:https://www.haomeiwen.com/subject/shabvqtx.html