ES6:Set数据结构

一、Set

1、定义:

一种类似数组的数据结构,但内部数据是唯一的,没有重复的数据

2、初始化语法:

可以接受一个数组或者类数组作为参数

var set = new Set([1,2,3,4,5]);

3、属性、方法:

  • set.size ==>内部数据数量
  • set.add() ==>添加某个值,返回Set结构本身,所以可以使用链式调用

            set.add(6).add(7).add(8);

  • set.delete() ==> 删除某个值,返回一个布尔值,表示删除是否成功

            set.delete(8)

  • set.has() ==> 返回一个布尔值,表示是否有这个数据

            set.has(8)

  • set.clear() ==> 清楚所有成员,没有返回值

4、遍历方法

var set = new Set(['aaa','bbb','ccc'])

  • keys():返回一个键名遍历器(Iterator),然后使用for...of遍历

由于set结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys和values方法的行为完全一致

  • values():返回一个键值遍历器(Iterator),然后使用for...of遍历

  • entries():返回一个键值对遍历器(Iterator),然后使用for...of遍历

  • forEach():使用回调函数遍历每个函数

  • for..of

  • 扩展运算符(...)

5、使用:实现并集,交集,差集

let set1 = new Set([1,2,3,4,5,6]);

let set2 = new Set([4,5,6,7,8,9]);

//并集

let union = new Set([...set1,...set2]);

//[1,2,3,4,5,6,7,8,9]

//交集

let intersect = new Set([...set1].filter(x => set2.has(x)));

//[4,5,6]

//差集

let differece= new Set([...set1].filter(x => !set2.has(x)));

//[1,2,3,4]

二、WeakSet

1、概念:

1、WeakSet成员只能是对象

2、内部对象都是弱引用

即垃圾回收机制不会管WeakSet内是否有该对象,只要这个对象在其他地方没有被使用了,就会被回收;

这意味折无法引用WeakSet的数据,也就不能遍历了

2、初始化:

var arr = [[1,2],[3,4]];

var ws = new WeakSet(arr);

3、方法:

ws.add()

ws.delete()

ws.has()

4、注意:

1、WeakSet没有size属性

2、不能遍历,因为内部数据随时可能消失,遍历机制无法保证数据存在

用途:

1、储存Dom节点,不用担心这些节点从文档移除是会引发内存泄露

猜你喜欢

转载自my.oschina.net/lcl6659/blog/1802898
今日推荐