JS中的new Map()方法介紹
在 JavaScript 中,Map
是一種新的數(shù)據(jù)結(jié)構(gòu),它與傳統(tǒng)的對象({}
)非常相似,用于存儲鍵值對(key-value pairs)。但是,Map
提供了更多的優(yōu)勢和功能,尤其是在鍵的處理上。本文將詳細介紹 new Map()
方法,如何使用它以及它相對于傳統(tǒng)對象的優(yōu)勢。
1. 什么是 Map?
Map
是 ES6 中新增的一個數(shù)據(jù)結(jié)構(gòu),它類似于對象,但它的鍵(key)可以是任何類型的值,而不僅限于字符串或符號。此外,Map
保持了鍵值對的插入順序,可以進行遍歷操作。我們可以通過 new Map()
來創(chuàng)建一個空的 Map
實例。
2. 創(chuàng)建一個 Map
2.1 使用 new Map() 創(chuàng)建空的 Map
const map = new Map(); console.log(map); // Map(0) {}
通過 new Map()
創(chuàng)建的是一個空的 Map
,此時 map
中沒有任何鍵值對。
2.2 使用二維數(shù)組初始化 Map
你可以通過傳遞一個二維數(shù)組來初始化 Map
。數(shù)組的每個元素是一個包含兩個值的子數(shù)組,分別表示鍵和值。
const map = new Map([ ['name', 'John'], ['age', 30], ['city', 'New York'] ]); console.log(map); // Map(3) { 'name' => 'John', 'age' => 30, 'city' => 'New York' }
2.3 使用其他 Map 實例初始化
可以通過將一個已經(jīng)存在的 Map
實例作為參數(shù)來初始化另一個 Map
:
const originalMap = new Map([ ['name', 'Alice'], ['age', 25] ]); const copiedMap = new Map(originalMap); console.log(copiedMap); // Map(2) { 'name' => 'Alice', 'age' => 25 }
3. Map 的常用方法
3.1 set(key, value)
set
方法用于向 Map
中添加或更新鍵值對。如果 Map
中已經(jīng)存在相同的鍵,那么它會更新該鍵對應(yīng)的值。
const map = new Map(); map.set('name', 'John'); map.set('age', 30); console.log(map); // Map(2) { 'name' => 'John', 'age' => 30 } map.set('name', 'Alice'); console.log(map); // Map(2) { 'name' => 'Alice', 'age' => 30 }
3.2 get(key)
get
方法用于根據(jù)給定的鍵獲取對應(yīng)的值。如果該鍵不存在,返回 undefined
。
const map = new Map(); map.set('name', 'John'); map.set('age', 30); console.log(map.get('name')); // John console.log(map.get('address')); // undefined
3.3 has(key)
has
方法檢查 Map
中是否包含給定的鍵,返回布爾值。
const map = new Map(); map.set('name', 'John'); console.log(map.has('name')); // true console.log(map.has('age')); // false
3.4 delete(key)
delete
方法用于刪除 Map
中指定鍵的鍵值對,返回一個布爾值,表示刪除操作是否成功。
const map = new Map(); map.set('name', 'John'); map.set('age', 30); console.log(map.delete('name')); // true console.log(map.delete('address')); // false console.log(map); // Map(1) { 'age' => 30 }
3.5 clear()
clear
方法清空 Map
中所有的鍵值對。
const map = new Map(); map.set('name', 'John'); map.set('age', 30); map.clear(); console.log(map); // Map(0) {}
3.6 size
size
屬性返回 Map
中鍵值對的數(shù)量。
const map = new Map(); map.set('name', 'John'); map.set('age', 30); console.log(map.size); // 2
4. Map 的迭代方法
與傳統(tǒng)的對象不同,Map
可以很方便地進行迭代。你可以通過多種方式遍歷 Map
,包括:
4.1 forEach 方法
forEach
方法用于遍歷 Map
中的每個鍵值對,并對每一對進行處理。
const map = new Map([ ['name', 'John'], ['age', 30] ]); map.forEach((value, key) => { console.log(`${key}: ${value}`); }); // 輸出: // name: John // age: 30
4.2 使用 for...of 迭代器
Map
支持 for...of
循環(huán),它會返回每個鍵值對。你可以使用解構(gòu)語法來直接訪問鍵和值。
const map = new Map([ ['name', 'John'], ['age', 30] ]); for (const [key, value] of map) { console.log(`${key}: ${value}`); } // 輸出: // name: John // age: 30
4.3 keys(), values(), 和 entries()
Map
提供了三個方法來分別獲取所有的鍵、值和鍵值對。
keys()
返回一個包含所有鍵的迭代器。values()
返回一個包含所有值的迭代器。entries()
返回一個包含所有鍵值對的迭代器。
const map = new Map([ ['name', 'John'], ['age', 30] ]); console.log([...map.keys()]); // ['name', 'age'] console.log([...map.values()]); // ['John', 30] console.log([...map.entries()]); // [['name', 'John'], ['age', 30]]
5. Map 相對于傳統(tǒng)對象的優(yōu)勢
- 鍵的類型:在傳統(tǒng)的 JavaScript 對象中,鍵(key)必須是字符串或者符號,而
Map
允許任何數(shù)據(jù)類型作為鍵(例如:對象、數(shù)組、函數(shù)等)。 - 保持插入順序:
Map
中的鍵值對是按插入順序進行迭代的,而對象則沒有這一保證。 - 性能:對于頻繁的添加和刪除操作,
Map
通常比對象更高效,尤其是在大量數(shù)據(jù)的場景下。
6. 總結(jié)
Map
是 JavaScript 中非常強大的數(shù)據(jù)結(jié)構(gòu),它提供了比傳統(tǒng)對象更多的靈活性和功能。在你需要頻繁操作鍵值對的場景中,使用 Map
是一個更好的選擇,特別是在鍵可能不是字符串的情況下。通過本文的講解,相信你已經(jīng)能夠熟練地使用 Map
來處理各種需求。
到此這篇關(guān)于JS中的new Map()方法介紹的文章就介紹到這了,更多相關(guān)js new map方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
不提示直接關(guān)閉網(wǎng)頁窗口的JS示例代碼
本篇文章主要是對不提示直接關(guān)閉網(wǎng)頁窗口的JS示例代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12JavaScript中的finally()方法和Filter()方法詳解
finally是 JavaScript 構(gòu)造中使用的方法try-catch,Filter() 是 JavaScript 中的一種方法,可以通過處理數(shù)組輕松提供過濾后的輸出數(shù)據(jù),本文就給大家詳細的介紹一下JavaScript中的finally()方法和Filter()方法,需要的朋友可以參考下2023-08-08JavaScript校驗Number(4,1)格式的數(shù)字實例代碼
這篇文章主要介紹了JavaScript校驗Number(4,1)格式的數(shù)字實例代碼,本文實現(xiàn)思路明確代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03silverlight線程與基于事件驅(qū)動javascript引擎(實現(xiàn)軌跡回放功能)
前一段時間一直在重構(gòu)工作站軌跡回放功能,一開始我覺得很簡單,但是后面引發(fā)了一系列奇怪的問題,讓我很疼,所以不得不寫個總結(jié)加深記憶,2011-08-08DataTables添加額外的查詢參數(shù)和刪除columns等無用參數(shù)實例
下面小編就為大家?guī)硪黄狣ataTables添加額外的查詢參數(shù)和刪除columns等無用參數(shù)實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07