什么是集合
Set数据结构允许向一个容器添加数据。
ECMAScript6(也叫ES2015)将Set数据结构和Map一起引入了JavaScript世界。
Set是一个对象或原始类型(字符串、数字或布尔)的集合,你可以把它看作是一个Map,其中值被用作Map的键,而Map的值总是一个布尔的真。
初始化一个集合
一个Set是通过调用来初始化的。
添加项目到一个集合
你可以通过使用add 方法向集合添加项目。
s.add('one')
s.add('two')
一个集合只存储唯一的元素,所以多次调用s.add('one') ,不会增加新的项目。
你不能在同一时间向一个集合添加多个元素。你需要多次调用add() 。
检查一个项目是否在集合中
一旦一个元素在集合中,我们就可以检查这个集合是否包含它。
s.has('one') //true
s.has('three') //false
按键从一个集合中删除一个项目
使用delete() 方法。
确定一个集合中的项的数量
使用size 属性。
从一个集合中删除所有项目
使用clear() 方法。
遍历一个集合中的项目
使用keys() 或values() 方法 - 它们是等同的。
for (const k of s.keys()) {
console.log(k)
}
for (const k of s.values()) {
console.log(k)
}
entries() 方法返回一个迭代器,你可以像这样使用。
const i = s.entries()
console.log(i.next())
调用i.next() 将返回每个元素作为一个{ value, done = false } 对象,直到迭代器结束,这时done 是true 。
你也可以对这个集合使用forEach()方法。
s.forEach(v => console.log(v))
或者你可以直接在for...的循环中使用这个集合。
for (const k of s) {
console.log(k)
}
用值初始化一个集合
你可以用一组值来初始化一个集合。
const s = new Set([1, 2, 3, 4])
转换为数组
将集合的键值转换为数组
const a = [...s.keys()]
// or
const a = [...s.values()]
一个弱化的集合
WeakSet是Set的一种特殊类型。
在一个Set中,项目永远不会被垃圾回收。而WeakSet可以让它的所有项自由地被垃圾回收。WeakSet的每个键都是一个对象。当这个对象的引用丢失时,其值可以被垃圾回收。
下面是主要的区别。
- 你不能对WeakSet进行迭代
- 你不能清除WeakSet中的所有项目
- 你不能检查它的大小
WeakSet通常由框架级代码使用,并且只暴露这些方法。
- add()
- 有()
- 删除()