Set的基本用法
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
const s = new Set();
[2,3,5,4,5,2,2].forEach(x => s.add(x));
// Set结构不会添加重复的值
for(let i of s) {
console.log(i);
}
// ## 初始化
// 例一 可以接受一个数组作为参数
const set = new Set([1,2,3,4,4,]);
// ...将一个数组转为用逗号分隔的参数序列
console.log([...set]);
// 例二
const items = new Set([1,2,3,4,5,5,5,5,]);
console.log(items.size);
// 例三 可以接受具有iterable接口的其他数据结构作为参数
const set2 = new Set(document.querySelectorAll('div'));
console.log(set.size);
// 类似于
const set2 = new Set();
document
.querySelectorAll('div')
.forEach(div => set.add(div));
console.log(set.size);
// set中NaN等于自身,其余比较相当于 ===
let set3 = new Set();
let a = NaN;
let b = NaN;
set3.add(a);
set3.add(b);
console.log(set3)
// 两个对象总是不相等的
let set4 = new Set();
set4.add({}); // 1
console.log(set4.size);
set4.add({}); // 2
console.log(set4.size);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
const s = new Set();
s.add(1).add(2).add(2);
console.log(s.size);
console.log(s.has(1));
console.log(s.has(2));
console.log(s.has(3));
s.delete(2);
console.log(s.has(2));
// set转数组
const items = new Set([1,2,3,4,5]);
const array = Array.from(items);
console.log(array);
// 去除数组重复成员
function dedupe(array) {
return console.log(Array.from(new Set(array)));
}
dedupe([1,1,2,3]);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
let set = new Set(['red', 'green', 'blue']);
// 返回键名
for(let item of set.keys()) {
console.log(item);
}
// 返回键值
for(let item of set.values()) {
console.log(item);
}
// set 键名=键值
// 返回键值对
for(let item of set.entries()){
console.log(item);
}
// 可以直接用 for of遍历Set
// for in 和 for of的区别是:in 是遍历对象,of是遍历值
for (let x of set) {
console.log(x);
}
// set也有forEach()方法
set.forEach((value, key) => console.log(key + ' : ' + value));
// 此处forEach方法的参数是一个处理函数。
// 数组的 map 和 filter 方法也可以间接用于Set
let s = new Set([1,2,3]);
// map 将原数组映射成新数组
s = new Set([...s].map(x => x * 2));
console.log(s);
// filter返回过滤后的新数组
s = new Set([...s].filter(x => (x % 3) ==0));
console.log(s);
// 实现并集、交集、差集
let a = new Set([1,2,3]);
let b = new Set([4,3,2]);
let union = new Set([...a, ...b]);
console.log(union);
let intersect = new Set([...a].filter(x => b.has(x)));
console.log(intersect);
let difference = new Set([...a