這篇文章主要講解了“es6的set怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“es6的set怎么使用”吧!
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出澄海免費(fèi)做網(wǎng)站回饋大家。
Set是一種用于存儲(chǔ)有序數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),Set中的元素具有唯一性,不允許存儲(chǔ)相同的元素;Set()可以接受一個(gè)可迭代對(duì)象作為參數(shù),但是會(huì)將這個(gè)可迭代對(duì)象中相同的內(nèi)容去除,因此可用于去除重復(fù)元素,預(yù)防“Array.from(new Set(arr))”或“[...new Set(arr)]”。
Set
是 ES6
提供的一種新的數(shù)據(jù)結(jié)構(gòu),它跟數(shù)組一樣用于存儲(chǔ)有序的數(shù)據(jù),但是沒有隨機(jī)訪問的能力,也就是說,不能像數(shù)組一樣通過索引來獲取具體的某個(gè)元素。除此以外,最重要的是,Set
中的元素具有唯一性,不允許存儲(chǔ)相同的元素!
Set
是一個(gè)構(gòu)造函數(shù),用于實(shí)例化實(shí)例:
let set = new Set()
set.add(1)//往set集合中添加元素1
除此以外,Set()
可以接受一個(gè)可迭代對(duì)象作為參數(shù),以作為實(shí)例初始化的數(shù)據(jù),但是會(huì)將這個(gè)可迭代對(duì)象中相同的內(nèi)容去除,然而,這也是數(shù)組去重的一個(gè)方法。
let set = new Set([1,2,2,1,4,3,5])
console.log(set)//Set(5) {1, 2, 4, 3, 5}
由元素唯一性這個(gè)特點(diǎn),可以利用在數(shù)組去重上:
//方法一:
Array.from(new Set(arr)) //arr是待去重的數(shù)組
//方法二:
[...new Set(arr)]
太酷了吧,類似的,利用這個(gè)特性還能實(shí)現(xiàn)字符串相同字符的去重。
[...new Set(str)].join('')
然而,上面都是通過 Set
類型元素的唯一性來實(shí)現(xiàn)的,那么 Set
內(nèi)部是如何判斷元素是否唯一的呢?它的內(nèi)部使用了一個(gè)算法 Same-value-zero equality
,大致與全等運(yùn)算符一致,區(qū)別在于這種算法認(rèn)為 NaN
等于 NaN
。
在 Set.prototype
上,定義了一個(gè)屬性 size
表示元素的個(gè)數(shù)。
let set = new Set([1,2,2,1,4,3,5])
console.log(set.size)//5
Set
實(shí)例的方法可以分為兩類:操作方法和遍歷方法。
Set.prototype.add(value)
—— 添加某個(gè)值到 Set
的末尾,返回 Set
本身。
Set.prototype.delete(value)
—— 刪除某個(gè)值,返回布爾值,表示是否刪除成功。
Set.prototype.has(value)
—— 返回一個(gè)布爾值,表示該值是否為 Set
的元素。
Set.prototype.clear()
—— 清除所有成員,沒有返回值。
值得一提的是,add()
方法的返回是 Set
本身,所以你應(yīng)該能想到鏈?zhǔn)秸{(diào)用:
let set = new Set()
set.add(1).add(2).add(3)
Set.prototype.keys()
—— 返回鍵名的遍歷器
Set.prototype.values()
—— 返回鍵值的遍歷器
Set.prototype.entries()
—— 返回鍵值對(duì)的遍歷器
Set.prototype.forEach()
—— 使用回調(diào)函數(shù)遍歷元素
由于 Set
結(jié)構(gòu)沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個(gè)值),所以 keys
方法和 values
方法的行為完全一致。
WeakSet
WeakSet
是 Set
的升級(jí)版,主要有兩個(gè)區(qū)別:
WeakSet
只能存儲(chǔ)引用類型,不能儲(chǔ)存基本類型數(shù)據(jù)。
WeakSet
中的引用類型都是弱引用。
首先,第一點(diǎn)很好理解,就是不能存儲(chǔ)基本類型的數(shù)據(jù):
const ws = new WeakSet()
ws.add(1)//報(bào)錯(cuò),Invalid value used in weak set
然后第二點(diǎn),WeakSet
中的對(duì)象都是弱引用。也就意味著垃圾回收機(jī)制不會(huì)考慮 WeakSet
對(duì)該對(duì)象的引用,一旦在外部引用計(jì)數(shù)為0,那么就等著被垃圾回收機(jī)制處理。所以,WeakSet
適合臨時(shí)存放一組對(duì)象。
由于這個(gè)特征,WeakSet
中的成員是不適合引用的,因?yàn)樗芸赡軙?huì)隨時(shí)被清理,然而,ES6
規(guī)定它是不可遍歷的。
WeakSet
中的方法也跟上面提到的 Set
基本一致,但是它沒有 size
屬性,沒有遍歷器方法。
感謝各位的閱讀,以上就是“es6的set怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)es6的set怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞標(biāo)題:es6的set怎么使用
瀏覽地址:http://www.chinadenli.net/article16/ipppdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、Google、建站公司、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)