美文网首页
ES6-------学习(5)Set和WeakSet数据结构

ES6-------学习(5)Set和WeakSet数据结构

作者: 默色留恋 | 来源:发表于2018-05-22 17:21 被阅读0次

ES6中提供了两新数据结构-Set和WeakSet。Set是类似于数组,但是成员变量的值都是唯一的,没有重复的值。WeakSet也是不重复的值的集合,但是只能用来存放对象。

Set本身提供了一个构造函数,用来生成Set数据结构。
Set的声明
let setArr = new Set(['aaa',111,null,undefined]);
console.log(setArr);//Set(4) {"aaa", 111, null, undefined}

Set不允许内部有重复的值,只能显示一个,相当于去重。

Set的方法和属性
Set的属性

Set.prototype.size:返回Set实例的成员数量。
Set.prototype.constructor:默认的构造Set函数。

let setArr = new Set(['aaa','bbb','ccc','bbb']);
for (let item of setArr){
  console.log(item);//aaa bbb ccc
}
console.log(setArr.size);//3
Set的操作函数

add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除成功。
has(value):返回一个布尔值,表示参数是否为Set的成员。
clear():清除所有成员,没有返回值。

add()增加
let setArr = new Set(['aaa','bbb','ccc','bbb']);
console.log(setArr);//Set(3) {"aaa", "bbb", "ccc"}
setArr.add('ddd');
console.log(setArr);
delete删除
let setArr = new Set(['aaa','bbb','ccc','bbb']);
setArr.delete('bbb');
console.log(setArr);//Set(2) {"aaa", "ccc"}
has(value)
let setArr = new Set(['aaa','bbb','ccc','bbb']);
console.log(setArr.has('aaa'));//true
clear()
 let setArr = new Set(['aaa','bbb','ccc','bbb']);
setArr.clear();
console.log(setArr);//Set(0) {}

Set遍历操作

for....of

set有四个遍历方法。可以用于遍历成员。
keys() :返回一个键名的遍历器
values() :返回一个值的遍历器
entries() :返回一个键值对的遍历器
forEach():使用回调函数遍历每个成员

注意:由于Set没有键名,只有值名,keys()和values()返回的结果是一样,

let set = new Set(['red','green','blue']);
for(let item of set.keys()){
  console.log(item);// red,green,blue
}
for(let item of set.values()){
  console.log(item);// red,green,blue
}
for(let item of set.entries()){
  console.log(item);
}
//所以,entries方法返回的遍历器同时包括键名和值,所以每次输出的是一个数组。其实成员都是完全一样的。

注意:Set默认的可遍历,其默认遍历器生成函数就是它的values方法。
这就意味着,可以省略values方法,直接用for…of遍历。

var set = new Set([1,2,3,4]);
for(let x of set){
  console.log(x);//1 2 3 4
}
forEach()
let setArr = new Set(['aaa','bbb','ccc','bbb']);
setArr.forEach((value)=>console.log(value));//aaa bbb ccc

WeakSet使用

WeakSet类似于Set,也是不重复的值的集合。但是它只能用于存储对象。而不能是其他类型的值。
WeakSet是一个个构造函数。可以接受数组和类似数组的对象作为参数。(实际上,任何具作为iterable接口的对象都可以作为WeakSet的参数)。该数组的所有成员都会自动成为WeakSet的实例对象的成员。

let Weak_Set=new WeakSet();
let obj={a:1,b:'aaa'}
Weak_Set.add(obj);

console.log(Weak_Set);

WeakSet结构有以下的方法
WeakSet.protoptype.add(value):向WeakSet实例添加一个新成员。
WeakSet.protoptype.delete(value):删除WeakSet实例指定成员。
WeakSet.protoptype.has(value):返回一个布尔值,表示某个值是否在WeakSet实例中。

WeakSet 不能遍历,是因为成员都是弱引用,随时可能消失,遍历不能保证成员的存在。可能刚刚遍历结束,成员就取不到了。WeakSet的一个用处是存储DOM节点,而不用担心这些节点从文档移除时,会引起内存的泄露。

相关文章

  • ES6-------学习(5)Set和WeakSet数据结构

    ES6中提供了两新数据结构-Set和WeakSet。Set是类似于数组,但是成员变量的值都是唯一的,没有重复的值。...

  • ES6中的Set和Map

    ES6中新增了Set、WeakSet、Map、WeakMap数据结构 一、Set Set是类似数组的数据结构,和数...

  • Set 和 Map 数据结构

    Set WeakSet Map WeakMap Set § ⇧ 基本用法 § ⇧ ES6 提供了新的数据结构 Se...

  • ES6中的Set和Map

    分四部分:Set、WeakSet、Map和WeakMap。 Set: 概念:类似于数组的数据结构,成员的值都是唯一...

  • Set和WeakSet数据结构

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

  • WeakSet的学习,应用场景

    WeakSet是什么? WeakSet 和 Set 类似,都是不重复的值的集合,但是和 Set 有两点不同: W...

  • Map、WeakMap、Set、WeakSet

    ES6引入了四种新的数据结构:映射(Map)、集合(Set)、弱集合(WeakSet)和弱映射(WeakMap) ...

  • Set和WeakSet

    WeakSet 与 Set 十分相似,有两点不同。 1、成员:成员必须为对象,不可以是基本标量;2、弱引用:Wea...

  • Set 和 WeakSet

    Set ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 向Set加入值的时候...

  • set和WeakSet

    1. Set 1.1 基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有...

网友评论

      本文标题:ES6-------学习(5)Set和WeakSet数据结构

      本文链接:https://www.haomeiwen.com/subject/odzhjftx.html