美文网首页
Set和Map数据结构

Set和Map数据结构

作者: 泥垢樂 | 来源:发表于2018-11-21 13:49 被阅读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个实例属性

  • 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 }

(完)

相关文章

网友评论

      本文标题:Set和Map数据结构

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