筆記 - JavaScript ES6 Map and Set

本篇學習 JavaScript ES6 中的 Map and Set。

Map

Map() constructor

1
2
new Map()
new Map(iterable)

Examples:

1
2
3
4
5
const myMap = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);

特點

  1. 類似 object 的 key-value 結構,其中 object 的 key 只能是 string, 但 map 的 key 則可以是任何資料型態(object 也可以當 key)。
  2. Map 資料是有順序的。iterate 的時候會照資料加入的順序去運送 first in first out。

常用 methods

長度

1
map.size // 4

CRUD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// set(key, value) and return Map object
map.set(4,'four')

// get(key) and return the value
map.get(2)

// has(key) and return t/f
map.has(3)

// delete(key) and return true if the element existed and has been removed, false if the element does not exist
map.delete(1)

// removes all elements
map.clear()

轉換成可遍歷的形式(Map iterator object, 類似 array)可搭配 for…of

1
2
3
map.keys() // {1, 2, 3, 4}
map.values() // {'one', 'two', 'three', 'four'}
map.entries() // {[1, 'one'], [2, 'two'], [3, 'three'], [4, 'four']}

Set

Set 類似 array, 可儲存任何類型(primitive values or object references)的唯一值(unique value),元素不可以重複,若存入重複的值則會被忽略。

沒有 index 也沒有 key,Set 用來儲存資料後即作為運算的最小單位,很少取出 Set 中的元素做運算。用來處理數學當中「集合」間的運算。

JavaScript 中,Set 中的元素是有順序的(因為是用 array 做出來的),但在實際運用上通常不在意其元素順序。另外在其他語言(例如 Python, JAVA)中的 Set 是沒有順序的。

當在 Set 中加入新元素時,Set 內部會用 === 來判斷是否有重複值。例外:NaN 會被判斷作是重複的值(雖然 NaN !== NaN)。

Set() constructor

1
2
3
let set = new Set()
let set = new Set(iterable)
// return a new Set object

常用方法

CRUD

1
2
3
set.add(element)
set.delete(element)
set.has(element)