ES6 - Set 和 Map

Set

結(jié)構(gòu)類似數(shù)組,但是沒有重復(fù)的值
Set 的遍歷順序是插入順序

沒有字面量表達(dá)式,只能通過 new Set() 構(gòu)造,并通過 add 方法添加項(xiàng)目:

const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

可以接受有 Iterator 接口的對象作為參數(shù)進(jìn)行初始化:

const set = new Set([1, 2, 3, 4, 4]);
[...set]  // [1, 2, 3, 4]

實(shí)例屬性和方法:
size() 返回成員數(shù)量
add(value) 添加成員
delete(value) 刪除成員
has(value) 檢查是否是Set的成員
clear() 清除所有成員

keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
for...of

let set = new Set(['red', 'green', 'blue']);
for (let item of set.entries()) {
  console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]

Set 的很多操作可以先轉(zhuǎn)成數(shù)組去做,然后再轉(zhuǎn)回Set

let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set結(jié)構(gòu):{2, 4, 6}

Map

Map 和對象的區(qū)別在于可以使用各種類型的值作為 key;使用對象作為 key,可以避免同名屬性沖突的問題
Map 的遍歷順序是插入順序

const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false

作為構(gòu)造函數(shù),Map 可以接受數(shù)組作為參數(shù):

const map = new Map([
  ['name', '張三'],
  ['title', 'Author']
]);

map.size // 2
map.has('name') // true
map.get('name') // "張三"

任何具有 Iterator 接口、且每個(gè)成員都是一個(gè)雙元素的數(shù)組的數(shù)據(jù)結(jié)構(gòu)都可以當(dāng)作 Map 構(gòu)造函數(shù)的參數(shù)

實(shí)例屬性和方法:
size() 返回成員總數(shù)
set(key, value) 更新鍵值,返回 map
get(key)
has(key) 返回布爾值
delete(key) 返回布爾值
clear() 清除所有成員,沒有返回值

keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
for...of

Map 的很多操作可以先轉(zhuǎn)成數(shù)組去做,然后再轉(zhuǎn)回Map

const map1 = new Map(
  [...map0].filter(([k, v]) => k < 3)
);

WeakSet 和 WeakMap

WeakSet 的成員只能是對象,WeakSet 中的對象都是弱引用,即垃圾回收機(jī)制不考慮 WeakSet 對該對象的引用
WeakMap 只接受對象作為key,且 key 指向的對象不計(jì)入垃圾回收機(jī)制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容