内容来自于阮一峰老师的《ES6入门》
本文主要是对内容进行梳理,方便自己学习,可随意复制转载
一、特性
类似数组,成员唯一,没有重复的值
二、创建
// 第一种方式
let set = new Set();
[2,3,4,5,6,2].map(s => set.add(x));
for (let i of set) {console.log(i)}
// 2 3 4 5 6
// 第二种方式
let set = new Set([2,3,4,5,6,2]);
for (let i of set) {console.log(i)}
// 2 3 4 5 6
三、属性和方法
1、属性
- constructor:默认是构造函数
- size:返回Set实例的成员总数
2、操作方法 - add(value) :添加某个值,返回Set结构本身
- delete(value) :删除某个值,返回布尔值,表示删除是否成功
- has(value) :是否存在,返回true/false
- clear(value) :清除所有成员,没有返回值
3、遍历方法 - keys():返回一个键名的遍历器
- values():返回一个键值的遍历器
- entries():返回一个键值对的遍历器
- forEach():使用回调函数遍历每个成员
由于Set结构只有键值,没有键名,所以ke()和value()方法的行为完全一致
四、使用技巧
1、Set结构的实例默认可遍历,其默认遍历起生成函数就是它的values方法
Set.prototype[Symbol.iterator] === Set.prototype.values // true
// 可以直接用for...of循环遍历Set
let set = new Set([1,2,3]);
for (let i of set) {
console.log(i);
}
// 1 2 3
// 由于扩展运算符(...)内部使用for...of循环,所以也可以用于Set结构
let set = new Set([1,2,3]);
let arr = [...set]; // [1,2,3];
// map和filter也可以用于Set
let set = new Set([1,2,3]);
set = new Set([...set].map(x => x*2));
// 返回Set结构:{2,4,6}
let set2 = new Set([1,2,3,4]);
set2 = new Set([...set].filter(x => x%2 === 0));
// 返回Set结构:{2,4}
// 两种数组去重方法
// 第一种
let arr = Array.from(new Set([1,2,3,3,4,5]));
// 第二种
let set = new Set([1,2,3,3,4,5]);
let arr = [...set];
// 并集
let a = new Set([1,2,3,4]);
let b = new Set([4,5,6,7]);
let union = new Set([...a,...b]);
// Set结构为:{1,2,3,4,5,6,7}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// Set结构为:{4}
// 差集
let difference = new Set([...a2].filter(x => !b2.has(x)));
// Set结构为:{1,2,3}