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)贊氧骤,謝謝】