您现在的位置:首页 >> 前端 >> 内容

es6set和weakset

时间:2017/9/9 9:09:00 点击:

  核心提示:五.Set和WeakSet数据结构是ES6新增。它与数组非常相似,但是Set数据结构的成员都是唯一的。特别说明:Set中只能添加一个NaN。一.Set数据结构:varset=newSet([1,2,3...

五.Set和WeakSet数据结构是ES6新增。

它与数组非常相似,但是Set数据结构的成员都是唯一的。

特别说明:Set中只能添加一个NaN。

一.Set数据结构:

varset=newSet([1,2,3,4,2,8,4]);//两个2

for(varelemofset){

console.log(elem)

}

//-----------循环用add添加赋值-----------------------

varset=newSet();

[1,2,3,4,2,8,4].map(function(elem){

set.add(elem);

})

for(letelemofset){//for...of遍历

console.log(elem)

}

//------扩展运算符--------------

varset=newSet([1,2,3,4,2,8,4]);

vararr=[...set];//扩展运算符(…)内部使用for…of循环,

console.log(arr);

//------清空、删除----------

varset=newSet([1,2,3,4,2,8,4]);

set.clear();//清空

set.delete(8);//删除

vararr=[...set];

console.log(arr);

//------遍历键值------------

set.forEach(function(value,key){

console.log(value+'='+key);

})

从输出结果可以看出,键和键值是相同的。

//-----判断set中是否含有----

console.log(set.has(8));

//----遍历值--------

letsetIter=set.values();

for(letvalofsetIter){

console.log(val);

}

//----数量---------

console.log(set.size);

//-------map和filter也可以用于set中--------

es5中数组新增map和filter方法

map:映射的意思,映射返回一个新数组,有返回值;filterArr:返回一个新对象

varmapArr=array.map(function(value,index,array){

returnvalue*value;

});

filter:过滤、筛选的意思;有返回值;filterArr:返回过滤后新数组

varfilterArr=array.filter(function(value,index,array){

if(value>20){

returntrue;

}

returnfalse;

});

//---------------------------------------------

letset=newSet([1,2,3]);

set=newSet([...set].map(x=>x*2));

vararr=[...set];

console.log(arr);

//返回Set结构:{2,4,6}

letset=newSet([1,2,3,4,5]);

set=newSet([...set].filter(x=>(x%2)==0));

vararr=[...set];

console.log(arr);

//返回Set结构:{2,4}

//---------------求并集、交集、差集--------------

//因此使用Set可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。

leta=newSet([1,2,3]);

letb=newSet([4,3,2]);

//--求并集

letunion=newSet([...a,...b]);

console.log([...union]);

//---就交集

letintersect=[...a].filter(function(elem){

returnb.has(elem);

});

console.log(intersect);

//---求差集

letdifference=[...a].filter(function(elem){

return!b.has(elem);

});

console.log(difference);

六.WeakSet数据结构

它与Set十分相似,对象的值也不能是重复的,与Set不同点:

1.WeakSet成员只能够是对象。

2.作为WeakSet成员的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。

3.使用WeakSet存储对象实例的好处是,由于是对对象实例的引用,不会被计入内存回收机制,所以删除实例的时候,不用考虑weakset,也不会出现内存泄漏。

//---错误---

varweakset=newWeakSet();

weakset.add(5);

//---正确---

varweakset=newWeakSet();

weakset.add({});//添加

varweakset=newWeakSet([[1,2],[3,4]]);

//---例子------------------------------------

varweakset=newWeakSet();

letaObj={a:'aa'};

letbObj=newString("你好");

letcObj=newNumber(8);

weakset.add(aObj);

weakset.add(bObj);

weakset.add(cObj);

//---删除-----

weakset.delete(aObj);

bObj=null;//把对象删除,weakset中的对象也没了

console.log(weakset.has(bObj));//weakset不能取值,也不能显示,只用来表示是否有重复的对象

Tags:ES S6 6S SE 
作者:网络 来源:easyClub_h