區(qū)別:1、set指的是“集合”結(jié)構(gòu),而Map指的是“字典”結(jié)構(gòu);2、set是以“[value, value]”的形式儲(chǔ)存元素,而Map是以“[key, value]”的形式儲(chǔ)存;3、Map可用get()通過(guò)鍵查找特定值并返回,而set不行。
本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。
簡(jiǎn)述:
- Set 和 Map 主要的應(yīng)用場(chǎng)景在于 數(shù)據(jù)重組 和 數(shù)據(jù)儲(chǔ)存。
- Set 是一種叫做集合的數(shù)據(jù)結(jié)構(gòu),Map 是一種叫做字典的數(shù)據(jù)結(jié)構(gòu)。
集合 與 字典 的區(qū)別:
- 共同點(diǎn):集合、字典 可以儲(chǔ)存不重復(fù)的值
- 不同點(diǎn):集合 是以 [value, value]的形式儲(chǔ)存元素,字典 是以 [key, value] 的形式儲(chǔ)存
集合(Set):
ES6 新增的一種新的數(shù)據(jù)結(jié)構(gòu),類似于數(shù)組,但成員是唯一且無(wú)序的,沒(méi)有重復(fù)的值。
Set 本身是一種構(gòu)造函數(shù),用來(lái)生成 Set 數(shù)據(jù)結(jié)構(gòu)。
Set 對(duì)象允許你儲(chǔ)存任何類型的唯一值,無(wú)論是原始值或者是對(duì)象引用。
const s = new Set() [1, 2, 3, 4, 3, 2, 1].forEach(x => s.add(x)) for (let i of s) { console.log(i) // 1 2 3 4 } // 去重?cái)?shù)組的重復(fù)對(duì)象 let arr = [1, 2, 3, 2, 1, 1] [... new Set(arr)] // [1, 2, 3]
注意:向 Set 加入值的時(shí)候,不會(huì)發(fā)生類型轉(zhuǎn)換,所以`5`和`"5"`是兩個(gè)不同的值。Set 內(nèi)部判斷兩個(gè)值是否不同,使用的算法叫做“Same-value-zero equality”,它類似于**精確相等**運(yùn)算符(`===`),主要的區(qū)別是**`NaN`等于自身,而精確相等運(yùn)算符認(rèn)為`NaN`不等于自身。**
let set = new Set(); let a = NaN; let b = NaN; set.add(a); set.add(b); set // Set {NaN} let set1 = new Set() set1.add(5) set1.add('5') console.log([...set1]) // [5, "5"]
操作方法:
-
add(value):新增,相當(dāng)于 array里的push。
-
delete(value):存在即刪除集合中value。
-
has(value):判斷集合中是否存在 value。
-
clear():清空集合。
遍歷方法:遍歷方法(遍歷順序?yàn)椴迦腠樞颍?/p>
-
keys():返回一個(gè)包含集合中所有鍵的迭代器。
-
values():返回一個(gè)包含集合中所有值得迭代器。
-
entries():返回一個(gè)包含Set對(duì)象中所有元素得鍵值對(duì)迭代器。
-
forEach(callbackFn, thisArg):用于對(duì)集合成員執(zhí)行callbackFn操作,如果提供了 thisArg 參數(shù),回調(diào)中的this會(huì)是這個(gè)參數(shù),沒(méi)有返回值。
字典(Map):
是一組鍵值對(duì)的結(jié)構(gòu),具有極快的查找速度。
const m = new Map() const o = {p: 'haha'} m.set(o, 'content') m.get(o) // content m.has(o) // true m.delete(o) // true m.has(o) // false
操作方法:
- set(key, value):向字典中添加新元素。
- get(key):通過(guò)鍵查找特定的數(shù)值并返回。
- has(key):判斷字典中是否存在鍵key。
- delete(key):通過(guò)鍵 key 從字典中移除對(duì)應(yīng)的數(shù)據(jù)。
- clear():將這個(gè)字典中的所有元素刪除。
遍歷方法:
- Keys():將字典中包含的所有鍵名以迭代器形式返回。
- values():將字典中包含的所有數(shù)值以迭代器形式返回。
- entries():返回所有成員的迭代器。
- forEach():遍歷字典的所有成員。
總結(jié)**:**
Set:
-
指的是“集合”結(jié)構(gòu)
-
[value, value],鍵值與鍵名是一致的(或者說(shuō)只有鍵值,沒(méi)有鍵名)。
- 不能通過(guò)鍵查找特定值
Map:
-
指的是“字典”結(jié)構(gòu)
-
[key, value],鍵值與鍵名是不一致的
- Map可用get()通過(guò)鍵查找特定值并返回
【