ES6中的Map与Set集合如何使用


这篇文章主要介绍了ES6中的Map与Set集合如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set集合如何使用文章都会有所收获,下面我们一起来看看吧。集合的概念以及和数组的区别
其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了.
而 Map 集合可以保存多个键-值对(key-value), Set 集合可以保存多个元素.
对Map 和 Set 一般不会逐一遍历其中的元素. Map 一般用来存储需要频繁取用的数据, Set 一般用来判断某个值是否存在其中.
ES 5 中对 Map 和 Set 的模拟方法
在ES 5 中,没有 Set和Map集合, 一般使用对象来模拟这两种集合, 对象的属性作为键(key), 以属性值作为值(value), 即以 property: property-value 来模拟 key-value 的形式. 具体实现如下:
模拟 Map 的键值对集合:
模拟 Set :
用对象模拟这两种集合的缺陷由于对象中的属性名必须是字符串, 如果传入的不是字符串则会强制转换成对应的字符串类型
一般使用 if 语句来判断一个 key 是否存在于集合中, 当这个 key 对应的 value 为 false 或者可以被强制转换为 false 时, 则 if 语句认为这个key不存在.但是其实是存在的, 只不过 value = false 而已.ES6 中的 Map 和 Set 集合
下面正式来讨论这两种集合的特点
Map
Map 中存储的是 key-value 形式的键值对, 其中的 key 和 value 可以是任何类型的, 即对象也可以作为 key . 这比用对象来模拟的方式就灵活了很多
Map 的创建和初始化可以用new Map()构造函数来创建一个空的 Map也可以在 Map() 构造函数中传入一个数组来创建并初始化一个 Map. 传入的数组是二维数组, 其中的每一个子数组都有两个元素, 前者会被作为 key, 后者会被作为 value, 这样就形成了一个 key-value 键值对. 例如:Map 可用的 方法set(key, value): 向其中加入一个键值对get(key): 若不存在 key 则返回 undefinedhas(key):返回布尔值delete(key): 删除成功则返回 true, 若key不存在或者删除失败会返回 falseclear(): 将全部元素清除size 属性, 属性值为 map 中键值对的个数
遍历方法 forEach()
和数组的 forEach 方法类似, 回调函数中都包含3个参数 值, 键, 和 调用这个方法的 Map 集合本身
Set 集合
Set 和 Map 最大的区别是只有键 key 而没有 value, 所以一般用来判断某个元素(key)是否存在于其中.创建和初始化方法, 和 Map 大同小异
既可以创建一个空 set 也可以用数组来初始化一个非空的set. 和 Map 不同的是, 数组是一维数组, 每个元素都会成为 set 的键.例如:
set 的方法1、add(key): 往set添加一个元素, 如果传入多个参数, 则只会把第一个加入进去2、has(key)
3、delete(key)
4、clear()遍历方法 forEach
和 Map 的 forEach 方法相似, 回调函数的参数也是3个 (value, key, ownerSet). 按道理来说因为 set 中只有 key 没有 value, 那么会掉函数中不应该存在 value 这个参数, 那么为什么这个 value 参数仍然存在呢?可能是因为 数组和 Map 的 forEach 方法的回调函数的参数都是这三个, 如果对于 Set 而改变了参数, 那么就会丢失了一致性. 这个理由……
那么既然没有 value , 那么这个value的值是什么呢?答案是和key 一样.我们可以把value和key 划等号了.下面这段代码可以验证这个说法.
WeakSet 和 WeakMap
这两个集合比之前的两个集合在名字之前都加上了 Weak, 这个 Weak 可以直译成弱, 这个弱指的是弱引用, 那么前面不带Weak的 Set 和 Map就不弱, 就是强了, 这个强指的是强引用.与 Set 和 Map 的区别先说表层的区别:弱版本集合的 key 只能是对象, 对于 value 的类型没有限制.弱版本集合没有 forEach 方法, 也没有 for in 方法, 也不能用数组来初始化(会报错).弱版本可用的方法较少. WeakSet 只有 add, has, delete 方法可用; WeakMap 只有 set, has, get, delete 方法可用.根本区别
弱版本的集合和它们对应的强版本根本的区别在对于对象的引用的强弱上, 而对象指的是 key 位置的对象, 即以对象为key的情况.强弱版本对于 key 是对象时的引用机制如下:
将对象设置为 key 时, 就在集合中保存了这个对象的引用. 当这个对象没有其他引用了的时候, 即只有集合还引用着这个对象的时候, 弱类型的集合会放弃对这个对象的引用, 把这个对象从集合里移除, 不让它继续存在于集合中了, 有些“赶尽杀绝”的意思; 但是强类型的集合还会一直保存着对这个对象的引用, 就把它一直放在集合里.这就是 [WeakSet 和 WeakMap] 与 [Set 和 Map] 的根本区别.
要注意的是这个机制只作用于 key , 而 value 位置绑定的对象无论是否还存在别的引用, WeakMap 都不会放弃这个对象.只有这个位置的 key 绑定的对象没有其他引用时, 才会把 key 和 value 都放弃. 决定权在于 key 位置.
弱版本集合的主要用处
若版本集合可以用在需要生命周期管理的地方,例如保存对一个 DOM 对象的引用, 如果一个 DOM 对象使用完毕, 没有其他的引用了, 那么它应该被 垃圾回收,以免 香港云主机产生内存泄漏,那么弱版本的集合就最适合用来保存这样的对象了。
注意:四种集合都是有序的, 即元素被添加进去的顺序就是在内部保存的顺序. 对于用数组来初始化的集合也一样, 按照在数组中的位置依次添加进集合中.关于“ES6中的Map与Set集合如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“ES6中的Map与Set集合如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注开发云行业资讯频道。

相关推荐: Ubuntu下怎么安装Pycharm

本篇内容介绍了“Ubuntu下怎么安装Pycharm”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ubuntu 18.04下1、安装python 2._版本,输…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/15 12:26
下一篇 07/15 12:26

相关推荐