前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6系列_11之Set和WeakSet数据结构

ES6系列_11之Set和WeakSet数据结构

作者头像
wfaceboss
发布2019-04-08 10:33:30
3280
发布2019-04-08 10:33:30
举报
文章被收录于专栏:wfaceboss

一、Set

1.Set是什么?

 Set是ES6 提供的一种新的数据结构。类似于数组。

2.Set能解决什么问题

Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重。

3.怎么使用Set相关东西

 Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

(1)Set的声明

代码语言:javascript
复制
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

(2)Set值的增删查

追加add:

在使用Array的时候,使用push进行追加值,那Set稍有不同,它使用add进行追加。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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:

清空所有

代码语言:javascript
复制
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}

setArr.clear()

console.log(setArr)//{}

set的循环 for…of…循环:

代码语言:javascript
复制
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循环:

代码语言:javascript
复制
let setArr = new Set(['1','2','3']);

setArr.forEach((value)=>console.log(value)) //1,2,3

size属性:

size属性可以获得Set值的数量。

代码语言:javascript
复制
let setArr = new Set(['1','2','3']);

console.log(setArr.size)// 3

 二、WeakSet

WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。

首先,WeakSet 的成员只能是对象,而不能是其他类型的值。

其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。

因此WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。

ES6 规定 WeakSet 不可遍历。

(1)WeakSet的声明以及赋值

声明只能先new一个空对象,然后在使用add方法将一个已定义的对象添加到其中。

代码语言:javascript
复制
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
weakObj.add(obj);
console.log(weakObj);

输出结果为:

WeakSet里边的值也是不允许重复的,比如:

代码语言:javascript
复制
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
 let obj1=obj
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);

输出结果为:

实际为对象指向同一个地址,当对象不指向同一个地址,即使两个对象里面的值,相同也是可以添加到WeakSet里的。比如:

代码语言:javascript
复制
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对传入值必须是对象作了很好的判断。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档