ES6 Set数据结构

Set结构的实例有以下属性:

  • Set.prototype.constructor:构造函数,默认是Set函数;
  • Set.prototype.size:返回Set实例的成员总数。

Set实例的方法分为以下两大类:操作方法和遍历方法。下面先介绍4个操作方法:

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

s.size //2

s.has(1) //true
s.has(2) //true
s.has(3) //false

s.delete(2)
s.has(2) //false

Array.from方法可以将Set结构转为数组。

const items = new Set([1, 2, 3, 4, 5])
const array = Array.from(items)

这就提供了一种去除数组重复元素的方法。


function dedupe(array) {
    return Array.from(new Set(array))
}

 遍历操作

Set结构的实例有4个遍历方法,可用于遍历成员。

  • keys():返回键名的遍历器;
  • values():返回键值的遍历器;
  • entries():返回键值对的遍历器;
  • forEach():使用回调函数遍历每个成员。

需要特别指出的是,Set的遍历顺序就是插入顺序。

keys()、values()、entries()

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);
}

//['red', 'red']
//['green', 'green']
//['blue', 'blue']

Set结构的实例默认可遍历,其默认遍历器生成函数就是它的values()方法。

Set.prototype[Symbol.iterator] === Set.prototype.values

//true

这意味着,可以省略values方法,直接用for ... of循环遍历Set。

另外,使用Set可以很容易地实现并集,交集和差集。
 

let a = new Set([1, 2, 3])
let b = new Set([4, 3, 2])

//并集
let union = new Set([...a, ...b])
// Set {1, 2, 3, 4}

//交集
let intersect = new Set([...a].filter(x => b.has(x)))
// Set {2, 3}

//差集
let difference = new Set([...a].filter(x => !b.has(x)))

WeakSet

 1. 含义

  • WeakSet的成员只能是对象,而不能是其他类型的值;
  • WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存。ES6规定WeakSet不可遍历。

 2. 语法

WeakSet是一个构造函数,可以使用new命令创建WeakSet数据结构。

const ws = new WeakSet();

它有以下三个方法:

  • WeakSet.prototype.add(value): 向WeakSet实例添加一个新成员;
  • WeakSet.prototype.delete(value): 清除WeakSet实例的指定成员;
  • WeakSet.prototype.has(value): 返回一个布尔值,表示某个值是否在WeakSet实例中。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值