Set和Map数据结构

2018-11-21  本文已影响0人  泥垢樂

参考:《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个实例属性

4个操作方法

4个遍历方法

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


2. WeakSet

与Set的2个区别:

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

3个操作方法

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

好处:不会出现内存泄露


3. Map

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

属性

5个操作方法

4个遍历方法

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个操作方法

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 }

(完)

上一篇 下一篇

猜你喜欢

热点阅读