set和 map 数据结构

时间:2022-05-22 10:38:00

set/map数据结构

创建: 

  var  s=new Set();

添加成员

  s.add(1)

遍历

  for of

  s.froEach

删除

  s.delete()

判断存在

  s.has()

清除

  s.clear()

转为数组

  array.from(set)

支持 keys. values. entries

  s.keys,  注意和 Object.的区别, set不支持 Object.keys

 

特性

  不接受添加重复的值, 所以 set 里面的值都是唯一的

  判断两个值是否相等使用的是类似  === 

  初始化set的时候可以接受一个数组或者一个字符串, 如果接受的是字符串那么会把字符串分解为一个数组, 不接受对象及其他基本类型, (因为都是不可迭代的??)

  set 接受 ... 的方式做扩展

  因为两个对象总是不相等的, 所以 set 会接受两个空对象

  set 的成员可以是任何的数据类型

  set 成员添加的顺序就是遍历出的顺序, 所以 set 是有序的

用法; 

  数组去重

  真心感觉这个数据结构的没啥用啊,  主要是成员有序加不重复这个特性

 

WeakSet

 

特性

  成员只能是对象

  对象的引用不计入垃圾回收机制

  不可遍历, 因为其成员的数是不固定的, 垃圾回收机制随时可能清空其中的一个成员, 所以不可遍历

  其余相同

初始化

  可以接受一个数组, 但是数组成员必须是对象

方法

  delete

  add

  has

这个东西有啥子用吗, 闷逼脸, 都不可以遍历, 真不知道什么情况下使用. 这个东西是用来监听对象的引用的吗

 

Map 数据结构

 

特性

map就是 Object 的一种改进

map 的键和值可以使任何类型, 但是 Object不行

map 判断相等也是使用的 === 的加强版本  

map 的元素是有序的

map的底层实现可能就是数组, 因为从使用来看, 确实在和数组之间转换比较容易

初始化  

  可以接受一个二维的数组,  其中数组元素必须有两个元素

  可以接受 set 做初始化数据

方法

  set, 多次的相同的键会覆盖

  get

  has

  delete

  clear

遍历

  keys

  values

  entries

  for of, 可以直接拿到 value, 但是 for of 不能遍历 Object的, 为此 es6 新增了 Object.values

  接受  ... 

  可以使用 forEach  

 

转为数组

  使用 ... 直接转换

  

weakMap

weakMap 和 weakSet 的形式差不多, 也是只接受对象, 并且是弱引用, 但是只是键名是弱的, 值还是强的

特性

  没有遍历方法

方法

  get

  set

  delete

  has

用处

  在一个对象上设置依赖其的变量, 一旦变量不被引用, 那么其所依赖的变量都消失