ES6 中新增的 Set 集合和 Map 集合

《深入理解ES6》閱讀隨筆

在原來 ES5 中沒有 Set 和 Map 時,可以通過數組來模擬實現,但是會存在一些問題:

  1. 數組對象的值或者鍵只能用字符串來表示,如果使用數字或者對象等其他類型來定義時,會進行強制類型轉換;
  2. 在判斷值或者鍵是否存在時,存在歧義,比如值爲 0 時,那麼其布爾值就爲 false,但其實該值是存在的。
    爲了解決數組創建集合所帶來的各種問題,在 ES6 中正式新增了 Set 集合和 Map 集合的概念。

Set 集合

基本屬性:Set 集合是一個有序無重複的集合,有以下基本功能:

// 聲明
let animals = new Set(['cat'])
// 判斷是否存在
console.log(animals.has('cat')) // true
// 數量
console.log(animals.size) // 1
// 新增
animals.add('dog')
console.log(animals) // Set { 'cat', 'dog' }
// 刪除
animals.delete('cat')
console.log(animals) // Set { 'dog' }
// 清空
animals.clear()
console.log(animals) // Set {}

在創建 Set 集合時,可以自動去重:

// 聲明
let animals = new Set([1, 2, 3, 3, 3]);
console.log(animals.size); // 3
console.log(animals); // Set {1,2,3}

forEach:Set 在使用 forEach 時與數組類似,但是第一參數與第二參數爲了與其他 forEach 保持統一,均爲 value :

// 聲明
let animals = new Set(['cat']);

animals.forEach((value, key, arr) => {
  console.log(value, key); // cat cat
  console.log(arr); // Set { 'cat' }
});

Weak Set
在使用對象作爲 Set 的值時,當作爲值的對象被銷燬時,並不會自動銷燬 Set 中的對象值,這回導致額外的內存駐留,甚至溢出。此時可以使用 Weak Set 來聲明,當作爲值的對象被銷燬時,在 Weak Set 中的對象也會被自動回收。

Map 集合

基本用法:與 Set 類似,除了鍵還有了值的概念;

// 聲明
let animals = new Map([['cat','Tom']])
// 判斷是否存在
console.log(animals.has('cat')) // true
// 數量
console.log(animals.size) // 1
// 新增
animals.set('dog','Wangcai')
console.log(animals) // Map { 'cat', 'dog' }
// 刪除
animals.delete('cat')
console.log(animals) // Map { 'dog' }
// 清空
animals.clear()
console.log(animals) // Map {}

Map 中也有 forEach 和 Weak Map 的概念,與 Set 類似,這裏就不贅述了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章