Set和Map数据结构

Set和Map数据结构

1.Set

定义:是一个构造函数,类似于数组,但成员值唯一。
用法:可用于去除数组重复成员。

const set = new Set([1,2,3,4,4,4]);
[...set]  //[1,2,3,4]

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

注:在Set内部,两个NaN是相等的,两个对象是不相等的。

属性和方法

  • Set.prototype.constructor:构造函数,默认就是Set函数。
    Set.prototype.size:返回Set实例的成员总数。

操作方法

  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  • Set.prototype.clear():清除所有成员,没有返回值。

注:Set结构没有键名,只有键值,Keys方法与values方法行为完全一致。

遍历方法:

  • Set.prototype.keys():返回键名的遍历器
  • Set.prototype.values():返回键值的遍历器
  • Set.prototype.entries():返回键值对的遍历器
  • Set.prototype.forEach():使用回调函数遍历每个成员

2.WeakSet

与Set的区别:

  1. 成员只能是对象
  2. WeakSet中的对象都是弱引用,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占内存,即不考虑WeakSet中是否还存有该对象。
  3. 没有size属性
  4. 没有foreach()属性
    注:3,4原因是WeakSet中对象都是弱引用,所以用处为储存DOM节点。

3.Map

定义:类似于对象,是键值对的集合,且“键”的范围不限于字符串。
用法:

操作方法

const m = new Map();
const o = {p: 'Hello World'};

m.set(o,'Ann')
m.get(o) // "content"

m.has(o) // true
m.delete(o) //true
m.has(o) //false
  • Map.prototype.set(key,value)
  • Map.prototype.get(key)
  • Map.prototype.has(key)
  • Map.prototype.delete(key)
  • Map.prototype.clear(key) 清除所有成员

遍历方法(同Set)

4.WeakMap

与Map的区别:

  1. 键名只能是对象
  2. WeakMap中的对象都是弱引用,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占内存,即不考虑WeakMap中是否还存有该对象。
  3. 没有size属性
  4. 没有遍历操作(即keys()values()entries()方法都没有)
  5. 没有clear()方法。
    注:3,4原因是WeakSet中对象都是弱引用,所以用处为储存DOM节点为键名和部署私有属性。

参考文章:
阮一峰ECMAScript 6 入门.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值