Set简记
Set是后出的API,可能大部分都习惯了用数组而忽略了这个数据类型,但是用熟练以后,也是可以大大提升特定场景开发效率的。
MDN文档见 Set() 构造函数
构造函数
必须使用new关键字构建,且需传入一个可迭代对象。1
2new Set('1123'); // Set(3) {1, 2, 3}
new Set([1,1,2,3]); // Set(3) {1, 2, 3}操作类
add增加项delete删除项clear清空项。
1
2
3
4
5
6
7const s1 = new Set(); // Set(0) {}
s1.add('1'); // Set(1) {1}
s1.add('1'); // Set(1) {1}
s1.add('2'); // Set(2) {1,2}
s1.add('3'); // Set(3) {1,2,3}
s1.delete('3'); // Set(2) {1,2}
s1.clear(); // Set(0) {}判断类
has是否存在某项isDisjointFrom是否不存在公共项isSubsetOf是否为指定集合的子集isSupersetOf是否为指定集合的超集。
1
2
3
4
5
6
7
8const s2 = new Set([1,2,3]);
s2.has(2); // true
s2.isDisjointFrom(new Set([2,3,4])); // false
s2.isDisjointFrom(new Set([4,5,6])); // true
s2.isSubsetOf(new Set([1,2])); // false
s2.isSubsetOf(new Set([1,2,3,4])); // true
s2.isSupersetOf(new Set([1,2,3,4])); // false
s2.isSupersetOf(new Set([1,2])); // true计算类
difference只存在于当前集合并且不在指定集合的集合intersection与指定集合的交集union与指定集合的并集。symmetricDifference与指定集合的并集中去掉交集的集合
1
2
3
4
5const s3 = new Set([1,2,3]);
s3.difference(new Set([3,4,5])); // Set(2) {1, 2}
s3.intersection(new Set([3,4,5])); // Set(1) {3}
s3.union(new Set([3,4,5])); // Set(5) {1, 2, 3, 4, 5}
s3.symmetricDifference(new Set([3,4,5])); // Set(4) {1, 2, 4, 5}遍历类(统一按照插入顺序遍历)
values返回值的可迭代器对象keys是values的别名,因Set没有keyentries返回[value, key]的可迭代器对象,因为Set没有key,所有实际返回的是[value, value]的可迭代器对象forEach对集合中的每个值执行一次提供的函数,没有返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14const s4 = new Set([1,2,undefined]);
for (let s of s4.values()) {
console.log(s); // 1 2 undefined
}
for (let s of s4.keys()) {
console.log(s); // 1 2 undefined
}
for (let s of s4.entries()) {
console.log(s); // [1,1] [2,2] [undefined,undefined]
}
s4.forEach((value, key) => {
console.log(value); // 1 2 undefined
console.log(key); // 1 2 undefined
})