Set
定義:類似于數(shù)組的數(shù)據(jù)結(jié)構(gòu)霹陡,成員值都是唯一且沒有重復(fù)的值
聲明:const set = new Set(arr)
入?yún)ⅲ壕哂蠭terator接口的數(shù)據(jù)結(jié)構(gòu)
屬性
constructor:構(gòu)造函數(shù),返回Set
size:返回實(shí)例成員總數(shù)
方法
add():添加值止状,返回實(shí)例
delete():刪除值烹棉,返回布爾值
has():檢查值,返回布爾值
clear():清除所有成員
keys():返回以屬性值為遍歷器的對(duì)象
values():返回以屬性值為遍歷器的對(duì)象
entries():返回以屬性值和屬性值為遍歷器的對(duì)象
forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
應(yīng)用場景
去重字符串:[...new Set(str)].join("")
去重?cái)?shù)組:[...new Set(arr)]或Array.from(new Set(arr))
集合數(shù)組
聲明:const a = new Set(arr1)怯疤、const b = new Set(arr2)
并集:new Set([...a, ...b])
交集:new Set([...a].filter(v => b.has(v)))
差集:new Set([...a].filter(v => !b.has(v)))
映射集合
聲明:let set = new Set(arr)
映射:set = new Set([...set].map(v => v * 2))或set = new Set(Array.from(set, v => v * 2))
重點(diǎn)難點(diǎn)
遍歷順序:插入順序
沒有鍵只有值浆洗,可認(rèn)為鍵和值兩值相等
添加多個(gè)NaN時(shí),只會(huì)存在一個(gè)NaN
添加相同的對(duì)象時(shí)旅薄,會(huì)認(rèn)為是不同的對(duì)象
添加值時(shí)不會(huì)發(fā)生類型轉(zhuǎn)換(5 !== "5")
keys()和values()的行為完全一致辅髓,entries()返回的遍歷器同時(shí)包括鍵和值且兩值相等
map
定義:類似于對(duì)象的數(shù)據(jù)結(jié)構(gòu),成員鍵可以是任何類型的值
聲明:const set = new Map(arr)
入?yún)ⅲ壕哂蠭terator接口且每個(gè)成員都是一個(gè)雙元素?cái)?shù)組的數(shù)據(jù)結(jié)構(gòu)
屬性
constructor:構(gòu)造函數(shù)少梁,返回Map
size:返回實(shí)例成員總數(shù)
方法
get():返回鍵值對(duì)
set():添加鍵值對(duì)洛口,返回實(shí)例
delete():刪除鍵值對(duì),返回布爾值
has():檢查鍵值對(duì)凯沪,返回布爾值
clear():清除所有成員
keys():返回以鍵為遍歷器的對(duì)象
values():返回以值為遍歷器的對(duì)象
entries():返回以鍵和值為遍歷器的對(duì)象
forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
重點(diǎn)難點(diǎn)
遍歷順序:插入順序
對(duì)同一個(gè)鍵多次賦值第焰,后面的值將覆蓋前面的值
對(duì)同一個(gè)對(duì)象的引用,被視為一個(gè)鍵
對(duì)同樣值的兩個(gè)實(shí)例妨马,被視為兩個(gè)鍵
鍵跟內(nèi)存地址綁定挺举,只要內(nèi)存地址不一樣就視為兩個(gè)鍵
添加多個(gè)以NaN作為鍵時(shí),只會(huì)存在一個(gè)以NaN作為鍵的值
Object結(jié)構(gòu)提供字符串—值的對(duì)應(yīng)烘跺,Map結(jié)構(gòu)提供值—值的對(duì)應(yīng)