站長資訊網
        最全最豐富的資訊網站

        es6的set有什么用

        Set是一種用于存儲有序數據的數據結構,Set中的元素具有唯一性,不允許存儲相同的元素;Set()可以接受一個可迭代對象作為參數,但是會將這個可迭代對象中相同的內容去除,因此可用于去除重復元素,預防“Array.from(new Set(arr))”或“[…new Set(arr)]”。

        es6的set有什么用

        前端(vue)入門到精通課程:進入學習
        Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

        本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

        一、基本用法

        SetES6 提供的一種新的數據結構,它跟數組一樣用于存儲有序的數據,但是沒有隨機訪問的能力,也就是說,不能像數組一樣通過索引來獲取具體的某個元素。除此以外,最重要的是,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 實例的方法可以分為兩類:操作方法和遍歷方法。

        1.操作方法

        • 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)
        登錄后復制

        2.遍歷方法

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

        由于 Set 結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以 keys 方法和 values 方法的行為完全一致。

        三、WeakSet

        WeakSetSet 的升級版,主要有兩個區別:

        • WeakSet 只能存儲引用類型,不能儲存基本類型數據。
        • WeakSet 中的引用類型都是弱引用。

        首先,第一點很好理解,就是不能存儲基本類型的數據:

        const ws = new WeakSet() ws.add(1)//報錯,Invalid value used in weak set
        登錄后復制

        然后第二點,WeakSet 中的對象都是弱引用。也就意味著垃圾回收機制不會考慮 WeakSet 對該對象的引用,一旦在外部引用計數為0,那么就等著被垃圾回收機制處理。所以,WeakSet 適合臨時存放一組對象。

        由于這個特征,WeakSet 中的成員是不適合引用的,因為它很可能會隨時被清理,然而,ES6 規定它是不可遍歷的。

        WeakSet 中的方法也跟上面提到的 Set 基本一致,但是它沒有 size 屬性,沒有遍歷器方法。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美极品欧美精品欧美视频| 精品国产香蕉伊思人在线在线亚洲一区二区 | 国产精品美女网站| 国产精品一区二区av| 中文精品久久久久人妻不卡 | 99久久精品国产一区二区三区| 成人精品一区二区三区中文字幕| 亚洲AV永久无码精品成人 | 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 91精品婷婷国产综合久久| 国产精品免费高清在线观看| 亚洲精品美女久久久久99| 下载天堂国产AV成人无码精品网站 | 午夜欧美精品久久久久久久| 亚洲äv永久无码精品天堂久久| 国产精品免费在线播放| 91精品婷婷国产综合久久| 99久久综合国产精品二区| 精品国精品国产| 精品国产品香蕉在线观看75| 国产亚洲精品观看91在线| 久久国产成人精品麻豆| 你懂的国产精品| 久久久久亚洲精品无码蜜桃| 日本精品一区二区三区在线视频一 | 精品久久久久久99人妻| 国产小呦泬泬99精品| 国产伦精品一区二区三区视频猫咪| 1区1区3区4区产品芒果精品| 日韩精品一区二区三区大桥未久| 久久国产精品99精品国产987| 久久久国产精品网站| 一区二区精品在线| 成人国内精品久久久久影院VR| 91亚洲精品自在在线观看| 国产成人精品福利网站在线观看| 国产精品无码久久四虎| 精品99久久aaa一级毛片| 久久青青草原精品国产不卡| 偷拍精品视频一区二区三区| 亚洲精品无码久久久久sm|