ES6-note-Set和Map(草稿)
前述
??在ES5中,主要用來存儲數(shù)據(jù)的集合就是數(shù)組,當(dāng)然也可以用對象方式存儲鍵值對類型的非數(shù)組型集合,數(shù)組主要通過整形下標去定位具體下標位置元素,對查詢操作來說,時間復(fù)雜度O(1),比較快,非數(shù)組型對象存儲方式能夠通過類似person.name或是person['name']方式獲取person對象中鍵為"name"所對應(yīng)的值,但是對于有一些特殊的應(yīng)用場景,例如:
let set = Object.create(null); set[5] = 4; set['5'] = 5; console.log(set[5], set['5']);??上面的實例打印的結(jié)果是什么呢?即便你有些年工作經(jīng)驗,有可能還會被小小的迷惑一下,可能會報錯或者可能輸出4和5?但結(jié)果是輸出兩個5,這是為什么呢,對于這種Nubmer類型的屬性,解析器會把它轉(zhuǎn)換成為字符串類型,所以在內(nèi)存中,屬性5的值會被"5"的值覆蓋掉(屬性還可以是小數(shù)類型),對象類型的屬性會被記錄成為"[object Object]",但有些情況下,我們可能偏偏想要存儲數(shù)值類型和字符類型共存或者是以對象作為屬性的集合呢,那ES5中的數(shù)據(jù)結(jié)構(gòu)似乎確實需要擴展高級的數(shù)據(jù)結(jié)構(gòu)才能應(yīng)對了。
Set和Map基本用法
??數(shù)組去除是js實際項目開發(fā)以及面試中常常會涉及到的知識點,方法多種多樣,網(wǎng)上能夠羅列出10多種(挑選三種思想常用):
1. 先排序,再將相鄰不同值元素依次存入新數(shù)組; 2. 定義新數(shù)組,將原數(shù)組中的元素逐漸添加進去,再利用indexOf判斷過濾; 3. 上例中的使用非數(shù)組集合也是中不錯的方法(效率高,缺點就是無法區(qū)分數(shù)值類型和字符類型的值);??好像有點麻煩,ES6提供的Set就能夠派上用場了:
new Set([1, 2, 3, 1, 2, 3, 4, '4'])// 結(jié)果 Set(5) {1, 2, 3, 4, "4"}??Set還有個功能就是快速的判斷指定元素是否存在于集合中: set.has(element)就可以,Set還提供了對集合的刪除或清空等操作。
??Map提供了另一重要應(yīng)用,能夠根據(jù)key快速獲取相應(yīng)值,而且和Set一樣,對數(shù)值、字符、對象類型的鍵不會進行轉(zhuǎn)換:
new Map([[5, 4], ['5', 5], [{}, 6 ], [{}, 7]])// 結(jié)果 Map(4) {5 => 4, "5" => 5, Object {} => 6, Object {} => 7}轉(zhuǎn)載于:https://www.cnblogs.com/boykait/p/10692266.html
總結(jié)
以上是生活随笔為你收集整理的ES6-note-Set和Map(草稿)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5的文档申明为什么是!DOCTY
- 下一篇: 什么是反射和字节码对象。