33、es6 -- Set和Map数据结构

99 阅读2分钟

Set

概述

set本身是一个构造函数,它是es6提供了一个新的数据结构,类似于数组 (但类型不是数组),返回的成员都是唯一的

使用

1、声明 set

image.png

类型是 object

2、实现数组去重

image.png

image.png

不过此时这个 类型是 object类型的,若我们想转为数组类型的,可以利用解构

image.png

image.png

方法

size 返回个数

image.png

image.png

返回的个数是 去重之后的个数

add 增加元素

image.png

image.png

delete 删除元素

image.png

image.png

clear 清空

image.png

image.png

has 判断元素是否存在

image.png

遍历

利用for of 进行遍历

返回的是值

image.png

keys()

image.png

image.png

values()

image.png

image.png

可以直接省略 values方法,

entries()

返回的是数组形式,里面包括键名和键值

image.png

image.png

数组中没有键名,只有键值,所以两个成员完全相同

利用 forEach进行遍历

image.png

image.png

返回的也就是 键名 + 键值

Set结构转为数组

Array.from 将Set结构转为数组

image.png

image.png

Set中的NaN

Set内部不会进行类型转换,判断两个值是否相同,使用的算法类似 ===

与 === 的区别是

Set内部认为 NaN === NaN

而 === 认为 NaN !== NaN

image.png

Set中的空对象

向 Set中add两个空对象,被视为两个值

image.png

属性

Set.prototype.constructor

构造函数,默认的就是Set函数

WeakSet

含义

与Set结构类似,也是不重复值的集合,不过 WeakSet的成员只能是对象

image.png

WeakSet中为弱引用

也就是说 垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,若其他对象都不再引入该对象,那么垃圾回收机制不会考虑WeakSet对该对象的引入,会自动的回收该对象所占的内存

Map

含义

map数据结构,类似于对象,也是键值对的集合 ,不过 “键” 的范围不限于字符串 ,各种类型的值都可以当成键,也包括对象

使用

可以接受一个数组作为参数,这个数组里面的值是一个个 表示键值对的数组

image.png

对同一个值进行赋值

若对同一个值进行赋值,那么会覆盖掉前一个

方法

size

返回map结构的成员总数

set

1、普通写法

image.png

image.png

key已经有值了,那么就是更改;否则就 生成该值

2、链式写法

image.png

get

读取

image.png

image.png

has

是否存在,返回boolean值

image.png

delete

删除

image.png

image.png

clear

清空

image.png

image.png

遍历

map结构和set结构里面的 遍历差不多

与其他数据结构互相转换

map转为数组

利用 扩展运算符

image.png

image.png

数组转为map

将数组传入map,就可以转为map了

image.png

image.png

WeakMap