本文转载自微信公众号《JS日报》,作者灰灰。转载本文请联系JS每日一问公众号。1、什么是集合(Set),是指具有一定属性的事物的总和,其中的每一项称为一个元素。在数学中,我们经常会遇到集合的概念:有限集:比如一个类的所有无限集同学组成的集合:比如所有自然数的集合在计算机中基本相同,有三个特性:确定性:对于给定的集合,集合中的元素是确定性的。也就是说,一个元素要么属于集合,要么不属于集合,两者都必须是其中之一。无序:在一个集合中,不管元素的顺序如何,只要元素完全相同,就认为是同一个集合。异构性:集合中的任意两个元素都是不同的。2、操作在ES6中,集合本身就是一个构造函数Set,用于生成Set数据结构,如下:consts=newSet();集合常用的方法有:add():Adddelete():Deletehas():Changeclear():Changeadd()添加某个值并返回Set结构本身当添加实例中已经存在的元素时,set不会处理Adds.add(1).add(2).add(2);//2只被添加过一次,体现了集合的异构性。delete()删除一个值,返回一个布尔值,表示删除是否成功s.delete(1)has()返回一个布尔值,判断该值是否是Set的成员s.has(2)clear()清空所有成员,无返回值s.clear()对多个集合的常见操作有:并集交集两个集合的差集和并集的共同元素,如下图:代码实现如下:leta=newSet([1,2,3]);letb=newSet([4,3,2]);//组合集letunion=newSet([...a,...b]);//设置{1,2,3,4}与两个集合A和B相交,即属于A和B的元素,如下图所示:代码标识如下:leta=newSet([1,2,3]);letb=newSet([4,3,2]);//交点letintersect=newSet([...a].filter(x=>b.has(x)));//设置{2,3}差集两个集合A和B,属于A但不属于B的元素称为A相对于B的差集,如下图:代码identification如下:leta=newSet([1,2,3]);letb=newSet([4,3,2]);//(a相对于b)差异letdifference=newSet([...a].filter(x=>!b.has(x)));//Set{1}3.应用场景一般情况下,使用数组的概率远高于使用集合的场景,一般依赖其确定性,它只包含不同的元素。因此,可以利用Set的一些native方法,轻松完成数组的去重,找到数组的共同元素。以及不同元素等操作的参考https://zh.wikipedia.org/wiki/%E5%B9%B6%E9%9B%86https://zh.wikipedia.org/wiki/%E8%A1%A5%E9%9B%86
