ES6 提供了新的数据结构 Set。

它有七个常用方法:

  1. 检查元素是否存在 has(element)
  2. 添加元素 add(element)
  3. 移除元素 delete(element)
  4. 清空集合 clear()
  5. 遍历集合元素 forEach(fun)
  6. 返回一个迭代器对象 values()
  7. 返回一个元素是类似 [value, value] 形式的迭代器对象 entries()

一个常用属性:

  • size 获取集合长度

Set 是一个构造函数,因此创建 Set 的方式就是通过 new 关键字创建。
语法:new Set([iterable]);
Set 可以传递一个可迭代对象(常用数组),它的所有元素将不重复地被添加到新的 Set 中。如果不指定此参数或其值为null,则会创建一个空集。

var set = new Set([1,2,3]);set.has(1);              //true
set.has(4);             //false
console.log(set.size);  //3
set.add(4);
console.log(set.size);  //4
set.delete(4);          //true
console.log(set.size);  //3
set.delete(5);          //false
set.clear();
console.log(set.size);  //0

values() 和 entries() 都会返回一个迭代器对象,不同的是里面的元素不一样。

var set = new Set([1,2,3]);var inter1 = set.entries();
var inter2 = set.values();console.log(inter1.next().value);        //[1, 1]
console.log(inter2.next().value);       //1
Set 的并集交集以及差集的实现

并集语法:var union = new Set([...setA , ...setB]);
交集语法:var intersection = new Set([...setA].filter(element => setB.has(element)));
差集语法:var difference = new Set([...setA].filter(element => !setB.has(element)));

var setA = new Set([1,2,3]);
var setB = new Set([3,4,5]);var union = new Set([...setA , ...setB]);
console.log(union);             //Set(5) {1,2,3,4,5}var intersection = new Set([...setA].filter(element => setB.has(element)));
console.log(intersection);      //Set(1) {3}var difference = new Set([...setA].filter(element => !setB.has(element)));
console.log(difference);        //Set(2) {1,2}
Set 和 WeakSet

WeakSet 也是一个构造函数,因此创建 WeakSet 的方式就是通过 new 关键字创建。
语法:new WeakSet([iterable]);
WeakSet 可以传递一个可迭代对象(常用数组),这个对象的元素必须是对象,它的所有元素将不重复地被添加到新的 WeakSet 中。如果不指定此参数或其值为null,则会创建一个空集。
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别:

  1. 首先,WeakSet 的成员只能是对象,而不能是其他类型的值。
var weakSet = new WeakSet();weakSet.add(1);         //报错
var weakSet1 = new WeakSet([[1,2],[3,4]]);      //不报错
var weakSet2 = new WeakSet([1,2]);             //报错,传入对象的元素必须是对象
  1. WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。

WeakSet 只有三个常用方法:

  1. 检查元素是否存在 has(element)
  2. 添加元素 add(element)
  3. 移除元素 delete(element)
var arr1 = [1,2];
var arr2 = [3,4];
var weakSet = new WeakSet([arr1,arr2]);weakSet.has([1,2]);         //false
weakSet.has(arr1);          //truevar arr3 = [5,6];
weakSet.add(arr3);
console.log(weakSet);       //WeakSet {Array(2), Array(2), Array(2)}weakSet.delete(arr1);       //true
console.log(weakSet);       //WeakSet {Array(2), Array(2)}weakSet.delete([1,2]);        //false

ES6——Set和WeakSet相关推荐

  1. es6之数据结构 set,WeakSet,mapWeakMap

    {let list = new Set();list.add(1);list.add(2);list.add(1);console.log(list); //Set(2) {1, 2} let arr ...

  2. ES6(三)——Set、WeakSet、Map、WeakMap

    一.Set的基本使用 在ES6之前,我们存储数据的结构主要有两种:数组.对象. 在ES6中新增了另外两种数据结构:Set.Map,以及它们的另外形式WeakSet.WeakMap. Set是一个新增的 ...

  3. set和map去重调用什么方法_你真的了解ES6的Set,WeakSet,Map和WeakMap吗?

    之前在学习 ES6 的时候,看到 Set 和 Map,不知道其应用场景有哪些,只觉得很多时候会用在数组去重和数据存储,后来慢慢才领悟到 Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结 ...

  4. 第十六节:ES6新增的 Set 和 WeakSet 是什么东西?

    题外话:往后的章节,跟前面的章节联系越来越紧密,很多知识的讲解建立在前面章节的学习基础上,如果是新来的同学,建议从第一节学起.如果是忘记了前面的内容,前端君也会在适当的时候,加上跳转链接. 什么是Se ...

  5. es6 WeakSet

    WeakSet 含义 WeakSet 结构与 Set 类似,也是不重复的值的集合.但是,它与 Set 有两个区别. 首先,WeakSet 的成员只能是对象,而不能是其他类型的值. const ws = ...

  6. es6 Map,Set 和 WeakMap,WeakSet

    这些是新加的集合类型,提供了更加方便的获取属性值的方法,不用像以前一样用hasOwnProperty来检查某个属性是属于原型链上的呢还是当前对象的.同时,在进行属性值添加与获取时有专门的get,set ...

  7. ES6 (十三)Set 和 Map 数据结构、WeakSet 和 WeakMap、WeakRef、FinalizationRegistry

    ES6 (十三)Set 和 Map 数据结构.WeakSet 和 WeakMap.WeakRef.FinalizationRegistry 文章目录 ES6 (十三)Set 和 Map 数据结构.We ...

  8. ES6 WeakSet数据结构 与Set十分相似

    它与Set十分相似,对象的值也不能是重复的,与Set不同点: 1.WeakSet成员只能够是对象. 2.作为WeakSet成员的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是 ...

  9. Set、Map、和WeakSet、WeakMap

    文章目录 集合(Set) Set 实例属性 constructor size Set 实例方法 操作方法 遍历方法 WeakSet 字典 Map Map 的属性 constructor size 操作 ...

最新文章

  1. 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
  2. 【原】画流程图工具visio使用技巧汇总
  3. 除了清空购物车,阿里年会的技术也够霸气!
  4. 机器学习库一:scikit-learn
  5. 硬盘安装以及磁盘分区和检测(笔记本R7000)
  6. 深入掌握Linux操作系统,其实也没你想象那么难
  7. Java中的IO学习总结
  8. Button或者ImageButton的背景设为透明或者半透明
  9. Pytorch——激活函数(Activation Function)
  10. 《shell脚本学习指南》自学笔记——入门
  11. QT5.14.2+VS2019安装配置教程Windows
  12. 华为交换机eth口作用_华为网络交换机mode键作用 华为交换机这些接口的作用?...
  13. 阻止冒泡事件(兼容大部分浏览器)
  14. 给元素设置鼠标移入后变为手型的属性
  15. 通过 api 和 keycloak 理解OIDC认证
  16. Applied ADO.NET: Building Data-Driven Solutions
  17. 图片的修改时间就是拍摄时间(家庭相片管理工具之三)
  18. Java中的排序——高级用法
  19. 二建考生速看 拿到二级建造师证书后该如何进行注册?
  20. 28.找出字符串中第一个匹配项的下标

热门文章

  1. 2019-06-02 Java学习日记之多线程上
  2. FastDFS安装脚本
  3. Kubernetes知识体系-从入门到精通
  4. 初探 amaze-vue( 基于vue.js封装的Amaze UI 组件库)
  5. Java 使用execute方法执行Sql语句
  6. win10下安装mysql5.7.16(解压缩版)
  7. Ext JS 6开发实例(三) :主界面设计
  8. 产品经理应聘之感受漫谈
  9. TextView IME option
  10. 今天开始写一些内容,留作备份。