欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          es6的set有什么用

          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)]”。

          es6的set有什么用

          前端(vue)入門(mén)到精通課程:進(jìn)入學(xué)習(xí)
          Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

          本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

          一、基本用法

          SetES6 提供的一種新的數(shù)據(jù)結(jié)構(gòu),它跟數(shù)組一樣用于存儲(chǔ)有序的數(shù)據(jù),但是沒(méi)有隨機(jī)訪問(wèn)的能力,也就是說(shuō),不能像數(shù)組一樣通過(guò)索引來(lái)獲取具體的某個(gè)元素。除此以外,最重要的是,Set 中的元素具有唯一性,不允許存儲(chǔ)相同的元素!

          Set 是一個(gè)構(gòu)造函數(shù),用于實(shí)例化實(shí)例:

          let set = new Set() set.add(1)//往set集合中添加元素1
          登錄后復(fù)制

          除此以外,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}
          登錄后復(fù)制

          由元素唯一性這個(gè)特點(diǎn),可以利用在數(shù)組去重上:

          //方法一: Array.from(new Set(arr)) //arr是待去重的數(shù)組  //方法二: [...new Set(arr)]
          登錄后復(fù)制

          太酷了吧,類(lèi)似的,利用這個(gè)特性還能實(shí)現(xiàn)字符串相同字符的去重。

          [...new Set(str)].join('')
          登錄后復(fù)制

          然而,上面都是通過(guò) Set 類(lèi)型元素的唯一性來(lái)實(shí)現(xiàn)的,那么 Set 內(nèi)部是如何判斷元素是否唯一的呢?它的內(nèi)部使用了一個(gè)算法 Same-value-zero equality ,大致與全等運(yùn)算符一致,區(qū)別在于這種算法認(rèn)為 NaN 等于 NaN 。

          二、實(shí)例屬性和方法

          實(shí)例屬性

          Set.prototype 上,定義了一個(gè)屬性 size 表示元素的個(gè)數(shù)。

          let set = new Set([1,2,2,1,4,3,5]) console.log(set.size)//5
          登錄后復(fù)制

          實(shí)例方法

          Set 實(shí)例的方法可以分為兩類(lèi):操作方法和遍歷方法。

          1.操作方法

          • Set.prototype.add(value) —— 添加某個(gè)值到 Set 的末尾,返回 Set 本身。
          • Set.prototype.delete(value) —— 刪除某個(gè)值,返回布爾值,表示是否刪除成功。
          • Set.prototype.has(value) —— 返回一個(gè)布爾值,表示該值是否為 Set 的元素。
          • Set.prototype.clear() —— 清除所有成員,沒(méi)有返回值。

          值得一提的是,add() 方法的返回是 Set 本身,所以你應(yīng)該能想到鏈?zhǔn)秸{(diào)用:

          let set = new Set() set.add(1).add(2).add(3)
          登錄后復(fù)制

          2.遍歷方法

          • Set.prototype.keys() —— 返回鍵名的遍歷器
          • Set.prototype.values() —— 返回鍵值的遍歷器
          • Set.prototype.entries() —— 返回鍵值對(duì)的遍歷器
          • Set.prototype.forEach() —— 使用回調(diào)函數(shù)遍歷元素

          由于 Set 結(jié)構(gòu)沒(méi)有鍵名,只有鍵值(或者說(shuō)鍵名和鍵值是同一個(gè)值),所以 keys 方法和 values 方法的行為完全一致。

          三、WeakSet

          WeakSetSet 的升級(jí)版,主要有兩個(gè)區(qū)別:

          • WeakSet 只能存儲(chǔ)引用類(lèi)型,不能儲(chǔ)存基本類(lèi)型數(shù)據(jù)。
          • WeakSet 中的引用類(lèi)型都是弱引用。

          首先,第一點(diǎn)很好理解,就是不能存儲(chǔ)基本類(lèi)型的數(shù)據(jù):

          const ws = new WeakSet() ws.add(1)//報(bào)錯(cuò),Invalid value used in weak set
          登錄后復(fù)制

          然后第二點(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 基本一致,但是它沒(méi)有 size 屬性,沒(méi)有遍歷器方法。

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)