一、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-tw/n/240569.html
微信掃一掃
支付寶掃一掃