內(nèi)容來自于阮一峰老師的《ES6入門》
本文主要是對內(nèi)容進(jìn)行梳理,方便自己學(xué)習(xí),可隨意復(fù)制轉(zhuǎn)載
一、特性
類似數(shù)組,成員唯一,沒有重復(fù)的值
二、創(chuàng)建
// 第一種方式
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:默認(rèn)是構(gòu)造函數(shù)
- size:返回Set實例的成員總數(shù)
2、操作方法 - add(value) :添加某個值,返回Set結(jié)構(gòu)本身
- delete(value) :刪除某個值,返回布爾值,表示刪除是否成功
- has(value) :是否存在,返回true/false
- clear(value) :清除所有成員,沒有返回值
3、遍歷方法 - keys():返回一個鍵名的遍歷器
- values():返回一個鍵值的遍歷器
- entries():返回一個鍵值對的遍歷器
- forEach():使用回調(diào)函數(shù)遍歷每個成員
由于Set結(jié)構(gòu)只有鍵值,沒有鍵名,所以ke()和value()方法的行為完全一致
四、使用技巧
1、Set結(jié)構(gòu)的實例默認(rèn)可遍歷,其默認(rèn)遍歷起生成函數(shù)就是它的values方法
Set.prototype[Symbol.iterator] === Set.prototype.values // true
// 可以直接用for...of循環(huán)遍歷Set
let set = new Set([1,2,3]);
for (let i of set) {
console.log(i);
}
// 1 2 3
// 由于擴展運算符(...)內(nèi)部使用for...of循環(huán),所以也可以用于Set結(jié)構(gòu)
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結(jié)構(gòu):{2,4,6}
let set2 = new Set([1,2,3,4]);
set2 = new Set([...set].filter(x => x%2 === 0));
// 返回Set結(jié)構(gòu):{2,4}
// 兩種數(shù)組去重方法
// 第一種
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結(jié)構(gòu)為:{1,2,3,4,5,6,7}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// Set結(jié)構(gòu)為:{4}
// 差集
let difference = new Set([...a2].filter(x => !b2.has(x)));
// Set結(jié)構(gòu)為:{1,2,3}