Map & Set
本篇整理自:ECMAScript 6 入門
Set
Set 數(shù)據(jù)結(jié)構(gòu),
特點(diǎn):
1.類似于數(shù)組;
2.它的值都是唯一的;
3.它的 key 與 value 是相同的,
屬性與方法:
1.size 返回 Set 實(shí)例的成員數(shù)
2.add(value) / delete(value) / has(value) 添加、刪除、判斷是否有 某個(gè)值
3.clear() 清除所有成員
4.keys() / values / entries 返回鍵名、鍵值、鍵值對 的遍歷器;keys() 與 values 得到的結(jié)果是一樣的,而entries 得到的每一個(gè)項(xiàng)大概長這樣 ["xxx", "xxx"], 相等
5.forEach(),
6.Set 沒有 map, filter,需要先轉(zhuǎn)換成為數(shù)組。
生成 Set
Set 本身是一個(gè)構(gòu)造函數(shù),使用 new Set() 可以把數(shù)據(jù)、類數(shù)組去重之后(注意,Set 認(rèn)為 NaN 等于自身),變成一個(gè) set 數(shù)據(jù)結(jié)構(gòu)
把 Set 轉(zhuǎn)成 Array
1.Array.from
2.拓展運(yùn)算符
Map
因?yàn)閭鹘y(tǒng)的對象鍵名有“字符串”的限制,Map 的出現(xiàn)就是為了解決這個(gè)問題
特點(diǎn)
1.與 Set 相比,它更類似對象;
2.Map 的鍵名可以是任何類型的值,鍵名為對象的時(shí)候,實(shí)際上是對應(yīng)內(nèi)存的地址
Object 結(jié)構(gòu)提供了“字符串—值”的對應(yīng),Map 結(jié)構(gòu)提供了“值—值”的對應(yīng),是一種更完善的 Hash 結(jié)構(gòu)實(shí)現(xiàn)。
屬性與方法
1.get(key) / set(key) / has(key) / delete(key) 讀取與設(shè)置,是否有某個(gè)鍵名,刪除
2.size() 成員總數(shù)
3.clear() 清除所有
4.keys() / values() / entries 鍵名、鍵值、鍵值對 的遍歷器;
Map 結(jié)構(gòu)的默認(rèn)遍歷器接口(Symbol.iterator屬性),就是entries方法。
5.forEach() 第一個(gè)參數(shù)(function)的參數(shù)為 value, key, Map實(shí)例
生成 Map
new Map() 可以把任何具有 Iterator 接口、且每個(gè)成員都是一個(gè)雙元素的數(shù)組的數(shù)據(jù)結(jié)構(gòu),也就是說,我們 可以把 Set 實(shí)例(注意,我們前面說了,Set 實(shí)例的鍵名與鍵值是一樣的)、Map 實(shí)例轉(zhuǎn)變?yōu)?Map
生成 Map 的方法是:
let map = new Map() // 想創(chuàng)建
map.set(1, "xxx") // 設(shè)置值
//我們也可以
let map = new Map([
[1, "xxx"],
[2, "yyy"]
])
// 這里面還是先創(chuàng)建 Map 實(shí)例,再逐個(gè)添加 鍵值對
let map = new Map()
map.set(1, "xxx")
map.set(2, "yyy")
注意,對于 Map 來說,0 與 -0 是一樣的,NaN 是等于自身的
Map 轉(zhuǎn)換成其它
1.生成 keys 的數(shù)組
[...map.keys()]
2.生成 values 的數(shù)組
[...map.values()]
3.生成鍵值對的數(shù)組:
[...map.entries()] // [[1,"xxx"], [2, "yyy"]]
4.直接對 Map 實(shí)例使用 ... 也可以得到 [...map.entries] 一樣的結(jié)果
5.Map 轉(zhuǎn)對象
遍歷
6.對象轉(zhuǎn) Map
遍歷 + map.set()
7.Map 轉(zhuǎn) JSON
如果想把數(shù)組轉(zhuǎn)變?yōu)?JSON 格式,必須考慮到鍵名不是字符串的情況,可以轉(zhuǎn)變?yōu)閿?shù)組 JSON。
鍵名-鍵值都符合 JSON 要求: JSON.stringify(map)
鍵名-鍵值有不符合 JSON 要求,考慮用: JSON.stringify([...map])
總結(jié)
Set 常用于數(shù)組去重;Map 是為了解決對象非字符串不能作為 key 的問題
它們的屬性方法都非常類似