Set和Map数据结构

参考:《Set和Map数据结构》


1. Set

Set中成员的值是唯一的,没有重复的值。可以用于去除数组重复数据

let set = new Set()
// 在Set内部,两个NaN是相等的
let a = NaN, b = NaN
set.add(a).add(b)
set.size // 1

// 两个对象总是不相等的
set.add({})
set.size // 2
set.add({})
set.size // 3

2个实例属性

  • Set.prototype.constructor:请忽略
  • Set.prototype.size

4个操作方法

  • add(value)
  • delete(value)
  • has(value)
  • clear()

4个遍历方法

  • keys()
  • values():默认
  • entries():键名和键值是同一个值,该方法用处不大
  • forEach()

set的遍历顺序就是插入顺序。
数组的mapfilter方法也可以间接用于Set。


2. WeakSet

与Set的2个区别:

  1. WeakSet的成员只能是对象(null也不行),而不能是其他类型的值。
  2. WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对改对象的引用。

3个操作方法

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

size属性,WeakSet不可遍历。
clear()操作方法,无遍历操作。

好处:不会出现内存泄露


3. Map

Object:字符串—值
Map:值—值

属性

  • size

5个操作方法

  • set(key, value)
  • get(key)
  • has(key)
  • delete(key)
  • clear()

4个遍历方法

  • keys()
  • values()
  • entries():默认
  • forEach()

Map的遍历顺序就是插入顺序,和Set一样。
结合数组的map方法、filter方法,可以实现Map的遍历和过滤(Map本身没有mapfilter方法)

Map的forEach与数组的forEach类似,但区别如下:

// Map的forEach,参数为value、key、map,注意value在前key在后
map.forEach((value, key, map) => console.log(key, value, map))

// Array的forEach,参数为item、index
array.forEach((item, index) => console.log(item, index))

4. WeakMap

与Map的2个区别:

  1. WeakMap只接受对象作为键名(null也不行),不接受其他类型的值作为键名。
  2. WeakMap的键名指向的对象,不计入垃圾回收机制。

4个操作方法

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

size属性,WeakMap不可遍历。
clear()操作方法,无遍历操作。

注:WeakMap弱引用的只是键名,而不是键值。键值依然是正常引用。

const wm = new WeakMap()
let key = {}
let obj = { foo: 1 }

wm.set(key, obj)
obj = null
wm.get(key) // Object { foo: 1 }

(完)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本...
    雨飞飞雨阅读 1,873评论 0 7
  • Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是...
    oWSQo阅读 804评论 0 1
  • 1. Set (1) 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复...
    __越过山丘__阅读 363评论 0 0
  • Set WeakSet Map WeakMap Set § ⇧ 基本用法 § ⇧ ES6 提供了新的数据结构 Se...
    Android_冯星阅读 306评论 0 0
  • 上午还风和日丽, 下午就冷风来袭。 你只穿了一件短袖衬衫, 回家的路上, 我一直担心你是不是着了凉。 那一晚, 我...
    乡村奶奶阅读 413评论 2 3