Set結(jié)構(gòu)

內(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}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容