ES6:了解Set集合与Map集合

134 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天

简介

  • Set 集合是一种无重复元素的有序列表。
  • Object.is()过滤重复值。
  • Set集合不是数组的子类。
  • 常被用于检查对象中是否存在某个键名,可以快速访问其中的数据,有效追踪各种离散值
  • 不会对所存值进行强制的类型转换,数字5和字符串‘5’是两个独立元素

方法

调用new Set()创建集合:

  • add(): 添加元素,如果添加重复值会被忽略
  • has():检测指定的值是否存在于Set集合中
  • size(): Set集合中值的总数
  • forEach(): 遍历并操作集合中的每一个值
  • delete(): 移除元素(某一个)
  • clear(): 清除所有元素

注意:不能像方位数组元素那样直接通过索引访问集合中元素。如有需要,最好先将Set集合转换成一个数组。

将Set集合转换为数组的方法: (1)展开运算符

let set = new Set([1,2,4,4,5,6]) array = [...set] console.log(array)//[1,2,4,5,6] (2)Array.from()

let set = new Set([1,2,4,4,5,6]) array = Array.from(set) console.log(array)//[1,2,4,5,6]

Weak Set

Weak Set集合是一类特殊的Set集合,只支持存放对象的弱引用,当该对象的其他强引用都被清除时,集合中的弱引用也会自动被垃圾回收。

方法:

  • add()
  • has()
  • delete()

注意:weakSet构造函数不接受任何原始值,如果数组中包含其他非对象值,程序会抛出错误

Set 与 WeakSet的区别

  • 在WeakSet的实例中,add()、has()和delete()这3个方法不能传入非对象参数,否则会报错
  • Weak Set集合不可迭代,不能被用于for-of循环。
  • Weak set集合不支持forEach方法
  • Weak Set集合不支持size属性

Map集合

简介

  • Map是多个无序键值对组成的集合,键名支持任意数据类型
  • Object.is()过滤重复值
  • 经常被用于缓存频繁取用的数据(获取已存的信息)
  • Map集合的所有对象的属性名必须是字符串,如果不是也会被自动转换成字符串,比如map['5']与map[5]是一个属性

方法

调用new Map()创建集合:

  • set():将任意类型的值添加到集合中
  • get():检索集合中的所有值
  • size(): 集合中包含值的数量
  • forEach(): 遍历并操作集合中的每一个值
  • has():检测指定的值是否存在于Set集合中
  • delete(key): 移除元素(某一个)
  • clear(): 清除所有元素

Weak Map

  • Weak Map集合是一类特殊的Map集合,只支持非null的对象类型的键名
  • 集合中存放的键是对象的弱引用:这种内存管理机制适合为那些实际使用与生命周期管理分离的对象添加额外信息

方法:

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

开发小技巧

当需要检测某对象中是否包含某属性的时候可以使用in计算符,存在则返回true。尽量避免使用类似map.count这种点的方法去判断,因为当值为0时会自动转换为false,存在判断失误的情况。