阅读全文需要 4 分钟。主要介绍对 ES6 中的 Set 集合方法的扩展。阅读本文后,你能创建出对 Set 方法扩展,并且结合下期内容,将其发布到 NPM 中。
往期回顾
一文了解 JavaScript 中的 Set(集合)
一文了解 JavaScript 中的 Set(集合)- 多种去重技巧
上两期介绍了 Set 的基本操作方法,Set 的去重和扩展等。
本期内容
本期对 Set 的常用功能进行扩展,文末给出完整源码。
为什么对简单的 Set 连续讲几期?这里我想解释一下。
很多朋友知道,假如对开源社区有贡献,会为自己面试加分不少。可是往往找不到突破口进行参与。
其实,为开源作贡献十分简单,发现项目或者框架有问题的,改正它;发现缺少的功能,补充它。
如果遇到问题,等待别人解决,其实就是将这样的一个机会让给了其他人。
从 Set 的第一期开始看,你会看到一个完整的开源贡献过程 ——
- 了解现有功能的局限性
- 产生优化功能的想法
- 实际编码扩展 Set 的功能
- 发布到 NPM 和 Github
这几期就是想通过这个简单的例子,不单单让大家了解到 Set 的基础知识,更是希望大家明白开源贡献没那么高不可攀,破除畏难情绪,踏出第一步。
下面是本期正文。
集合的基本操作
数学中集合的基本操作包括 ——
集合的关系
- 空集
- 子集
- 真子集
- 相等
集合的基本运算
- 并集
- 交集
- 全集
- 补集
针对集合的这些操作,我们使用 Set 进行对应的扩展。
空集
集合中不存在任何元素,即大小为 0。
因为我们是扩展 Set,所以可以在原型链上对其直接定义方法。
子集
如果集合 A 中任意一个元素都是集合 B 的元素,那么 A 是 B 的子集。
核心是遍历当前集合,如果当前集合中每个元素都在目标集合中,那么当前集合就是目标集合的子集。
真子集
如果集合 A 是集合 B 的子集,且集合 B 中至少有一个元素不属于 A,那么 A 是 B 的真子集。
这里有一些小技巧,根据真子集的定义,真子集会比目标集合小。所以通过先比对大小,再判断是否属于子集,清晰易懂。
同样的技巧也应用在判断集合相等中 ——
相等
两个集合的元素完全相同。
集合的大小相等,且为子集关系,则两个集合相等。
并集
包含给定所有集合中的元素。所以只需遍历所有集合,将其元素合并到一个集合中。
交集
由所有属于给定集合的共同元素组成。
这里也存在一定技巧,先获取最大的集合,然后通过判断最大集合中的元素是否同时存在于其它集合中来实现。
结语
全集和补集留待大家思考,源码可私信「集合扩展」获取。
下期内容就跟大家将这个扩展发布到 NPM 中。
这段时间待业在家,主要做一些前端的分享,毕竟最熟悉是前端这块。个人的技术栈包括 Python,Angular,JavaScript,Docker 等。 如果你对哪方面的知识感兴趣或有疑问,欢迎一起讨论。
最后的最后,点收藏的同时不妨点个赞吧:)