JavaScript Map是一種鍵值對的集合,其中鍵和值可以是任何類型。相較於JavaScript中的對象,Map有更好的性能和靈活性。在本文中,我們將從以下幾個方面介紹如何高效地使用JavaScript Map:初始化、添加/刪除鍵值對、遍歷Map、與數組的互相轉換、Map的性能比較。
一、初始化Map
要初始化一個Map,可以通過直接創建一個新的Map對象或從一個二維數組或其他可迭代對象中創建。
// 直接創建Map對象 const map1 = new Map(); // 從二維數組中創建Map對象 const array = [['key1', 'value1'], ['key2', 'value2']]; const map2 = new Map(array); // 從其他可迭代對象中創建Map對象 const set = new Set([['key1', 'value1'], ['key2', 'value2']]); const map3 = new Map(set);
二、添加/刪除鍵值對
要向Map中添加一個鍵值對,可以使用Map實例的set方法。要刪除一個鍵值對,可以使用delete方法。要刪除Map中所有的鍵值對,則可以使用clear方法。
const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
console.log(map.get('key1')); // 輸出:'value1'
map.delete('key1');
console.log(map.has('key1')); // 輸出:false
map.clear();
console.log(map.size); // 輸出:0
三、遍歷Map
JavaScript中的Map可以使用for…of循環、forEach方法、keys方法、values方法和entries方法進行遍歷。
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
// for...of循環
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
// forEach方法
map.forEach((value, key) => {
console.log(`${key}: ${value}`);
});
// keys方法
for (const key of map.keys()) {
console.log(key);
}
// values方法
for (const value of map.values()) {
console.log(value);
}
// entries方法
for (const [key, value] of map.entries()) {
console.log(`${key}: ${value}`);
}
四、與數組的互相轉換
如果需要將Map轉換為數組,可以使用Array.from方法或擴展運算符。需要注意的是,Map轉換為數組時會得到一個二維數組。
const map = new Map([['key1', 'value1'], ['key2', 'value2']]); const array1 = Array.from(map); console.log(array1); // 輸出:[['key1', 'value1'], ['key2', 'value2']] const array2 = [...map]; console.log(array2); // 輸出:[['key1', 'value1'], ['key2', 'value2']] // 將數組轉換為Map const array = [['key1', 'value1'], ['key2', 'value2']]; const map = new Map(array);
五、Map的性能比較
相較於JavaScript中的對象,Map具有更好的性能和靈活性。在下面的例子中,我們將通過對比對象和Map的遍歷性能來證明這一點。
const object = { key1: 'value1', key2: 'value2' };
// 對象的遍歷性能
console.time('objectIteration');
for (const key in object) {
const value = object[key];
}
console.timeEnd('objectIteration'); // 輸出:objectIteration: 0.015ms
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
// Map的遍歷性能
console.time('mapIteration');
for (const [key, value] of map) {}
console.timeEnd('mapIteration'); // 輸出:mapIteration: 0.005ms
可以看到,Map的遍歷性能比對象的遍歷性能要好,並且它可以存儲任意類型的值,而對象只能將鍵轉換為字符串進行存儲。
六、總結
本文詳細地介紹了JavaScript中Map的基本用法,從初始化、添加/刪除鍵值對、遍歷Map、與數組的互相轉換、Map的性能比較等多個方面進行了闡述。可以看到,Map相較於對象具有更好的性能和靈活性,是一個非常有用的數據結構。
完整代碼示例:
// 直接創建Map對象
const map1 = new Map();
// 從二維數組中創建Map對象
const array = [['key1', 'value1'], ['key2', 'value2']];
const map2 = new Map(array);
// 從其他可迭代對象中創建Map對象
const set = new Set([['key1', 'value1'], ['key2', 'value2']]);
const map3 = new Map(set);
const map = new Map();
map.set('key1', 'value1');
map.set('key2', 'value2');
console.log(map.get('key1')); // 輸出:'value1'
map.delete('key1');
console.log(map.has('key1')); // 輸出:false
map.clear();
console.log(map.size); // 輸出:0
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
// for...of循環
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
// forEach方法
map.forEach((value, key) => {
console.log(`${key}: ${value}`);
});
// keys方法
for (const key of map.keys()) {
console.log(key);
}
// values方法
for (const value of map.values()) {
console.log(value);
}
// entries方法
for (const [key, value] of map.entries()) {
console.log(`${key}: ${value}`);
}
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
const array1 = Array.from(map);
console.log(array1); // 輸出:[['key1', 'value1'], ['key2', 'value2']]
const array2 = [...map];
console.log(array2); // 輸出:[['key1', 'value1'], ['key2', 'value2']]
// 將數組轉換為Map
const array = [['key1', 'value1'], ['key2', 'value2']];
const map = new Map(array);
const object = { key1: 'value1', key2: 'value2' };
// 對象的遍歷性能
console.time('objectIteration');
for (const key in object) {
const value = object[key];
}
console.timeEnd('objectIteration'); // 輸出:objectIteration: 0.015ms
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
// Map的遍歷性能
console.time('mapIteration');
for (const [key, value] of map) {}
console.timeEnd('mapIteration'); // 輸出:mapIteration: 0.005ms
原創文章,作者:CXGX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/135264.html
微信掃一掃
支付寶掃一掃