ES6系列_11之Set和WeakSet数据结构
一、Set
1.Set是什么?
Set是ES6 提供的一种新的数据结构。类似于数组。
2.Set能解决什么问题
Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重。
3.怎么使用Set相关东西
Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

(1)Set的声明
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}
(2)Set值的增删查
追加add:
在使用Array的时候,使用push进行追加值,那Set稍有不同,它使用add进行追加。
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.add('4')
console.log(setArr);//Set {"1", "2", "3","4"}
删除delete:
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.delete("1") console.log(setArr);//Set {"2", "3"}
查找has:
用has进行值的查找,返回的是true或者false。
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} console.log(setArr.has("1"))//true console.log(setArr.has("0"))//false
删除clear:
清空所有
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.clear() console.log(setArr)//{}
set的循环 for…of…循环:
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} for (let item of setArr){
console.log(item); //1,2,3
}
forEach循环:
let setArr = new Set(['1','2','3']); setArr.forEach((value)=>console.log(value)) //1,2,3
size属性:
size属性可以获得Set值的数量。
let setArr = new Set(['1','2','3']); console.log(setArr.size)//
二、WeakSet
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。
首先,WeakSet 的成员只能是对象,而不能是其他类型的值。
其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
因此WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。
ES6 规定 WeakSet 不可遍历。
(1)WeakSet的声明以及赋值
声明只能先new一个空对象,然后在使用add方法将一个已定义的对象添加到其中。
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
weakObj.add(obj);
console.log(weakObj);
输出结果为:

WeakSet里边的值也是不允许重复的,比如:
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
let obj1=obj
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);
输出结果为:

实际为对象指向同一个地址,当对象不指向同一个地址,即使两个对象里面的值,相同也是可以添加到WeakSet里的。比如:
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
let obj1={a:'1',b:'2'}
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);
输出的结果为:

总结:在实际开发中Set用的比较多,WeakSet用的并不多,但是WeakSet对传入值必须是对象作了很好的判断。
ES6系列_11之Set和WeakSet数据结构的更多相关文章
- Set 和 WeakSet 数据结构
Set 和 WeakSet 数据结构是ES6新增. 它与数组非常相似,但是Set数据结构的成员都是唯一的. 特别说明:Set 中只能添加一个NaN 一.Set 数据结构: var set = new ...
- 大白话,讲编程之《ES6系列连载》汇总
如果你经历过2,3年前的前端开发,你一定感受过兼容IE6,7的痛苦,一定用过网页三剑客的dreamweaver编写html,面试的时候面试官一定会问你:会用PS切图吗? 刚开始的时候你发现,web前端 ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...
- ES6 系列之 Babel 是如何编译 Class 的(下)
前言 ES5 寄生组合式继承 function Parent (name) { this.name = name; } Parent.prototype.getName = function () { ...
- es6系列-变量声明
es6系列所有文章都是阅读阮一峰老师的<ES6标准入门>(第2版)所做的读书笔记.方便日后查阅相关基础知识. git地址: https://github.com/rainnaZR/es6- ...
- ES6 系列之异步处理实战
前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator -> Async 异步处理方式的改变. API 介绍 为了实现这个功能,我 ...
- [ES6系列-01]Class:面向对象的“新仇旧恨”
[原创]CoderPower 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 这是公众号(码路工人有力量)开通后的第二篇,写得还是有待改进吧.这次准备写一个关于ES6基础的短文系列,努力尽快 ...
- ES6系列之项目中常用的新特性
ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...
随机推荐
- [转]vim 退格键(backspace)不能用
http://my.oschina.net/zhangdapeng89/blog/56593 1.去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nocompatible ...
- EF大数据批量添加性能问题
前几天做一个批量发消息的功能,因为要向消息表中批量写入数据,用的EF框架的插入方法:不用不知道,一用吓一跳:就10000条数据就耗时好几分钟,对应追求用户体验的我来说这是极不能容忍的,后来改为拼接SQ ...
- Android之第三方平台实现多平台分享操作
开发中常常遇到分享操作,当用到多种分享时,如:QQ,微信,微博,短信等,可以借助第三方平台来完成,此博客主要借助mob平台来完成相关操作,当然也可以借助其他平台,如友盟等. 先来看看效果图: 如图看出 ...
- 记录Tomcat8.5文件上传,文件权限无法访问
部署一个服务,文件上传本地可以,但是在Linux上通过docker发布到容器上,文件上传后,没有权限访问,查了好久才发现是Tomcat8.5的问题,低版本没有这个问题,现记录下. tomcat/bin ...
- 通过命令启动一个activity(am pm 命令)
一.am的含义是activityManager 主要作用是启动activity.service .broadcast 1.通过adb命令启动acitvity,首先需要设置activity 的 e ...
- 你以为在用SharePoint但其实不是
博客地址 http://blog.csdn.net/foxdave 原文链接:http://www.techrepublic.com/blog/tech-decision-maker/you-thin ...
- Scrum冲刺博客(总)
一.在 Alpha 阶段认领的任务 二.明日任务安排 成员 任务 任务量/小时 陈伟泽 项目进度把控 1 李嘉廉 24点算法" Stack数据结构实现,生成不重复的算式(考虑结合律和结合律) ...
- SELU︱在keras、tensorflow中使用SELU激活函数
arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...
- 用pil产生验证码出现:ImportError: The _imagingft C module is not installed
这个是由于PIL没有编译freetype导致的查看 lib/python2.7/site-packages/PIL/看看 _imagingft.so 是否存在 # 需要先安装jpeg库wget htt ...
- Codeforces 1009C: Annoying Present
C. Annoying Present time limit per test 2 seconds memory limit per test 256 megabytes input standard ...