這篇文章主要講解了“es6的set怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“es6的set怎么使用”吧!
Set是一種用于存儲有序數據的數據結構,Set中的元素具有唯一性,不允許存儲相同的元素;Set()可以接受一個可迭代對象作為參數,但是會將這個可迭代對象中相同的內容去除,因此可用于去除重復元素,預防“Array.from(new Set(arr))”或“[...new Set(arr)]”。
Set
是 ES6
提供的一種新的數據結構,它跟數組一樣用于存儲有序的數據,但是沒有隨機訪問的能力,也就是說,不能像數組一樣通過索引來獲取具體的某個元素。除此以外,最重要的是,Set
中的元素具有唯一性,不允許存儲相同的元素!
Set
是一個構造函數,用于實例化實例:
let set = new Set()
set.add(1)//往set集合中添加元素1
除此以外,Set()
可以接受一個可迭代對象作為參數,以作為實例初始化的數據,但是會將這個可迭代對象中相同的內容去除,然而,這也是數組去重的一個方法。
let set = new Set([1,2,2,1,4,3,5])
console.log(set)//Set(5) {1, 2, 4, 3, 5}
由元素唯一性這個特點,可以利用在數組去重上:
//方法一:
Array.from(new Set(arr)) //arr是待去重的數組
//方法二:
[...new Set(arr)]
太酷了吧,類似的,利用這個特性還能實現字符串相同字符的去重。
[...new Set(str)].join('')
然而,上面都是通過 Set
類型元素的唯一性來實現的,那么 Set
內部是如何判斷元素是否唯一的呢?它的內部使用了一個算法 Same-value-zero equality
,大致與全等運算符一致,區別在于這種算法認為 NaN
等于 NaN
。
在 Set.prototype
上,定義了一個屬性 size
表示元素的個數。
let set = new Set([1,2,2,1,4,3,5])
console.log(set.size)//5
Set
實例的方法可以分為兩類:操作方法和遍歷方法。
Set.prototype.add(value)
—— 添加某個值到 Set
的末尾,返回 Set
本身。
Set.prototype.delete(value)
—— 刪除某個值,返回布爾值,表示是否刪除成功。
Set.prototype.has(value)
—— 返回一個布爾值,表示該值是否為 Set
的元素。
Set.prototype.clear()
—— 清除所有成員,沒有返回值。
值得一提的是,add()
方法的返回是 Set
本身,所以你應該能想到鏈式調用:
let set = new Set()
set.add(1).add(2).add(3)
Set.prototype.keys()
—— 返回鍵名的遍歷器
Set.prototype.values()
—— 返回鍵值的遍歷器
Set.prototype.entries()
—— 返回鍵值對的遍歷器
Set.prototype.forEach()
—— 使用回調函數遍歷元素
由于 Set
結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以 keys
方法和 values
方法的行為完全一致。
WeakSet
WeakSet
是 Set
的升級版,主要有兩個區別:
WeakSet
只能存儲引用類型,不能儲存基本類型數據。
WeakSet
中的引用類型都是弱引用。
首先,第一點很好理解,就是不能存儲基本類型的數據:
const ws = new WeakSet()
ws.add(1)//報錯,Invalid value used in weak set
然后第二點,WeakSet
中的對象都是弱引用。也就意味著垃圾回收機制不會考慮 WeakSet
對該對象的引用,一旦在外部引用計數為0,那么就等著被垃圾回收機制處理。所以,WeakSet
適合臨時存放一組對象。
由于這個特征,WeakSet
中的成員是不適合引用的,因為它很可能會隨時被清理,然而,ES6
規定它是不可遍歷的。
WeakSet
中的方法也跟上面提到的 Set
基本一致,但是它沒有 size
屬性,沒有遍歷器方法。
感謝各位的閱讀,以上就是“es6的set怎么使用”的內容了,經過本文的學習后,相信大家對es6的set怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。