-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试官:ES6中新增的Set、Map两种数据结构怎么理解? #38
Comments
这几种数据结构,好奇实际在业务中应用场景有哪些? |
map是有用在树结构转换、eventBus中 |
let str = "352255"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
如果要用一句来描述,我们可以说
Set
是一种叫做集合的数据结构,Map
是一种叫做字典的数据结构什么是集合?什么又是字典?
集合
是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合
字典
是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同
区别?
一、Set
Set
是es6
新增的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值,我们一般称为集合Set
本身是一个构造函数,用来生成 Set 数据结构增删改查
Set
的实例关于增删改查的方法:add()
delete()
has()
clear()
add()
添加某个值,返回
Set
结构本身当添加实例中已经存在的元素,
set
不会进行处理添加delete()
删除某个值,返回一个布尔值,表示删除是否成功
has()
返回一个布尔值,判断该值是否为
Set
的成员clear()
清除所有成员,没有返回值
遍历
Set
实例遍历的方法有如下:关于遍历的方法,有如下:
Set
的遍历顺序就是插入顺序keys
方法、values
方法、entries
方法返回的都是遍历器对象forEach()
用于对每个成员执行某种操作,没有返回值,键值、键名都相等,同样的forEach
方法有第二个参数,用于绑定处理函数的this
扩展运算符和
Set
结构相结合实现数组或字符串去重实现并集、交集、和差集
二、Map
Map
类型是键值对的有序列表,而键和值都可以是任意类型Map
本身是一个构造函数,用来生成Map
数据结构增删改查
Map
结构的实例针对增删改查有以下属性和操作方法:size
size
属性返回 Map 结构的成员总数。set()
设置键名
key
对应的键值为value
,然后返回整个 Map 结构如果
key
已经有值,则键值会被更新,否则就新生成该键同时返回的是当前
Map
对象,可采用链式写法get()
get
方法读取key
对应的键值,如果找不到key
,返回undefined
has()
has
方法返回一个布尔值,表示某个键是否在当前 Map 对象之中delete()
delete
方法删除某个键,返回true
。如果删除失败,返回false
clear()
clear
方法清除所有成员,没有返回值遍历
Map
结构原生提供三个遍历器生成函数和一个遍历方法:遍历顺序就是插入顺序
三、WeakSet 和 WeakMap
WeakSet
创建
WeakSet
实例WeakSet
可以接受一个具有Iterable
接口的对象作为参数在
API
中WeakSet
与Set
有两个区别:API
size
属性WeackSet
只能成员只能是引用类型,而不能是其他类型的值WeakSet
里面的引用只要在外部消失,它在WeakSet
里面的引用就会自动消失WeakMap
WeakMap
结构与Map
结构类似,也是用于生成键值对的集合在
API
中WeakMap
与Map
有两个区别:API
clear
清空方法WeakMap
只接受对象作为键名(null
除外),不接受其他类型的值作为键名WeakMap
的键名所指向的对象,一旦不再需要,里面的键名对象和所对应的键值对会自动消失,不用手动删除引用举个场景例子:
在网页的 DOM 元素上添加数据,就可以使用
WeakMap
结构,当该 DOM 元素被清除,其所对应的WeakMap
记录就会自动被移除注意:
WeakMap
弱引用的只是键名,而不是键值。键值依然是正常引用下面代码中,键值
obj
会在WeakMap
产生新的引用,当你修改obj
不会影响到内部参考文献
The text was updated successfully, but these errors were encountered: