一、Map的基本概念
在ES6之前,JavaScript中常用的鍵值對數據結構是Object。Object只能用字符串作為鍵名,這限制了它的使用場景。Map是ES6中引入的一種新的數據結構,它可以用任意值作為鍵名。下面是一個簡單的Map的例子:
let map = new Map(); map.set('key1', 'value1'); map.set('key2', 'value2'); console.log(map.get('key1')); //'value1' console.log(map.size); //2
Map的基本操作包括:set()方法設置鍵值對、get()方法獲取鍵對應的值、size屬性獲取Map中鍵值對的個數。Map可以包含任意類型的鍵和值,甚至包括NaN和undefined。
二、Map的遍歷方法
Map提供了四種遍歷方法:keys()、values()、entries()和forEach()。
1. keys()方法
keys()方法返回一個Iterator對象,它包含Map中所有鍵的列表。在遍歷鍵之前,需要先用for-of循環或者next()方法將Iterator對象轉換成數組或者遍歷器對象。下面是一個keys()方法的例子:
let map = new Map(); map.set('A', 'a'); map.set('B', 'b'); let keys = map.keys(); for(let key of keys){ console.log(key); //A B }
2. values()方法
values()方法返回一個Iterator對象,它包含Map中所有值的列表。在遍歷值之前,需要先用for-of循環或者next()方法將Iterator對象轉換成數組或者遍歷器對象。下面是一個values()方法的例子:
let map = new Map(); map.set('A', 'a'); map.set('B', 'b'); let values = map.values(); for(let value of values){ console.log(value); //a b }
3. entries()方法
entries()方法返回一個Iterator對象,它包含Map中所有鍵值對的列表。在遍歷鍵和值之前,需要先用for-of循環或者next()方法將Iterator對象轉換成數組或者遍歷器對象。下面是一個entries()方法的例子:
let map = new Map(); map.set('A', 'a'); map.set('B', 'b'); let entries = map.entries(); for(let [key, value] of entries){ console.log(key+':'+value); //A:a B:b }
4. forEach()方法
forEach()方法可以遍歷Map中的每一個鍵值對,並對其進行操作。forEach()方法接受一個函數作為參數,這個函數可以接受三個參數:鍵值、鍵名和Map本身。下面是一個forEach()方法的例子:
let map = new Map(); map.set('A', 'a'); map.set('B', 'b'); map.forEach(function(value, key, map){ console.log(key+':'+value); //A:a B:b });
三、Map的其他用法
1. Map的初始化
Map可以通過傳入數組或者其他Map對象來進行初始化。通過傳入數組,可以用數組中的分離出的鍵值對來初始化Map對象。下面是一個初始化Map對象的例子:
let arr = [['key1', 'value1'], ['key2', 'value2']]; let map1 = new Map(arr); let map2 = new Map(map1); console.log(map1.get('key1'));//value1 console.log(map2.get('key1'));//value1
2. WeakMap與Map的區別
WeakMap與Map的區別在於,WeakMap只能用對象作為鍵名,而且鍵名只能是弱引用。弱引用的意思是,當鍵值對中的鍵沒有其它引用時,會被自動垃圾回收機制回收。所以,WeakMap中的鍵值對不會造成內存泄漏。下面是一個WeakMap的例子:
let wm = new WeakMap(); let object = {}; wm.set(object, 'value'); console.log(wm.get(object));//value object = null; //鍵已經沒有引用了,所以它被垃圾回收了
四、總結
ES6中的Map是一種非常有用的數據結構,它可以用任意類型的鍵名和值來存儲數據。Map還提供了多種遍歷方法,方便我們對Map中的數據進行操作。另外,如果需要對鍵名具有強引用的Map,可以使用普通的Map,如果需要對鍵名具有弱引用的Map,可以使用WeakMap。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/240569.html