Set 理解

Set 允許存儲任意類型的不重復(fù)的數(shù)據(jù)

語法

new Set([iterable])

參數(shù)

iterable
如果傳遞一個可迭代對象,它的所有元素將不重復(fù)地被添加到新的 Set 中。如果不指定此參數(shù)或其值為null,則新的 Set為空。

返回值

一個新的 Set 對象。

值相等

因?yàn)?Set 中的值總是唯一的,所以需要判斷兩個值是否相等。需要注意的是在 Set 里面 NaN 跟自身相等

與對象的區(qū)別

- Set Object
鍵類型 任意類型 String/Symbol
鍵覆蓋 不會 會覆蓋原型鏈上的
長度 size屬性獲取 需要自己另外處理
順序 不保證順序 按照使用者添加的順序

基本使用

let strSet = new Set('hellow word')

// 獲取當(dāng)前 Set 的長度
console.log(strSet.size)
// 結(jié)果輸出 8 的原因是
// 因?yàn)樽址且粋€可迭代對象,每次迭代都返回一個字符
// 又因?yàn)槟?Set 里面的鍵具有唯一性

console.log(strSet)

// 在Set對象尾部添加一個元素。返回該Set對象。
console.log(strSet.add('!'))

// 移除Set對象內(nèi)的所有元素。返回 undefined
// console.log(strSet.clear())

// 從 Set 中刪除對應(yīng)的鍵,
// 如果該鍵在刪除之前存在于 Set 中,刪除時則返回 true
// 如果該鍵在刪除之前不存在于 Set 中,刪除時則返回 false
console.log(strSet.delete('h'))

// 返回一個新的迭代器對象,該對象包含Set對象中的按插入順序排列的所有元素的值的[value, value]數(shù)組。
// 為了使這個方法和Map對象保持相似, 每個值的鍵和值相等。
for (let [key, value] of strSet.entries()) {
    console.log(key, value)
}
console.log(strSet.entries())

// 按照插入順序,為Set對象中的每一個值調(diào)用一次callBackFn。如果提供了thisArg參數(shù),回調(diào)中的this會是這個參數(shù)。
strSet.forEach((key, value) => {
    console.log(key, value, this)
}, [12])

// 判斷當(dāng)前 Set 中,是否有該值的存在
console.log(strSet.has('h'))

// 返回一個新的迭代器對象,該對象包含Set對象中的按插入順序排列的所有元素的值。
for (let key of strSet.keys()) {
    console.log(key)
}
console.log(strSet.keys())

典型用例 數(shù)組去重

const arrSet = new Set([1, 2, 1, 2, null, undefined, null, {a: 1}, undefined, {a: 1}, () => {}, () => {}])
console.log(arrSet)

// Set 轉(zhuǎn)換 Array
const arr1 = [...arrSet]
console.log(arr1)

// Set 轉(zhuǎn)換 Array
const arr2 = Array.from(arrSet)
console.log(arr2)

【筆記不易,如對您有幫助,請點(diǎn)贊,謝謝】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容