JavaScript 中 “new Map()”的使用

new Map() 是 JavaScript 中用于創建 Map 對象 的構造函數。Map 是一種鍵值對集合,類似于普通對象(Object),但有以下區別:


1. Map 的特點

1.1 鍵的類型
  • Map:鍵可以是任意類型(包括對象、函數、基本類型等)。
  • Object:鍵只能是字符串或 Symbol。
1.2 順序
  • Map:鍵值對按照插入順序排列。
  • Object:鍵的順序不一定與插入順序一致。
1.3 大小
  • Map:可以通過 size 屬性直接獲取鍵值對的數量。
  • Object:需要手動計算鍵的數量。
1.4 性能
  • Map:在頻繁增刪鍵值對的場景下,性能優于 Object
  • Object:在靜態鍵值對的場景下,性能優于 Map

2. Map 的基本用法

2.1 創建 Map
const map = new Map();
2.2 添加鍵值對

使用 set(key, value) 方法添加鍵值對。

map.set('name', 'Alice');
map.set(1, 'One');
map.set({ key: 'obj' }, 'This is an object');
2.3 獲取值

使用 get(key) 方法獲取值。

console.log(map.get('name')); // 輸出: "Alice"
console.log(map.get(1)); // 輸出: "One"
2.4 檢查鍵是否存在

使用 has(key) 方法檢查鍵是否存在。

console.log(map.has('name')); // 輸出: true
console.log(map.has('age')); // 輸出: false
2.5 刪除鍵值對

使用 delete(key) 方法刪除鍵值對。

map.delete('name');
console.log(map.has('name')); // 輸出: false
2.6 獲取鍵值對數量

使用 size 屬性獲取鍵值對數量。

console.log(map.size); // 輸出: 2
2.7 清空 Map

使用 clear() 方法清空所有鍵值對。

map.clear();
console.log(map.size); // 輸出: 0

3. 遍歷 Map

3.1 遍歷鍵

使用 keys() 方法獲取所有鍵。

for (const key of map.keys()) {console.log(key);
}
3.2 遍歷值

使用 values() 方法獲取所有值。

for (const value of map.values()) {console.log(value);
}
3.3 遍歷鍵值對

使用 entries() 方法獲取所有鍵值對。

for (const [key, value] of map.entries()) {console.log(`${key}: ${value}`);
}
3.4 使用 forEach 遍歷
map.forEach((value, key) => {console.log(`${key}: ${value}`);
});

4. Map 的常見使用場景

4.1 存儲復雜鍵

當鍵是對象或函數時,Map 是更好的選擇。

const objKey = { id: 1 };
const funcKey = () => {};const map = new Map();
map.set(objKey, 'This is an object key');
map.set(funcKey, 'This is a function key');console.log(map.get(objKey)); // 輸出: "This is an object key"
console.log(map.get(funcKey)); // 輸出: "This is a function key"
4.2 維護插入順序

當需要維護鍵值對的插入順序時,Map 是更好的選擇。

const map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);for (const [key, value] of map) {console.log(`${key}: ${value}`);
}
// 輸出:
// a: 1
// b: 2
// c: 3
4.3 緩存數據

Map 可以用于緩存數據,鍵可以是任意類型。

const cache = new Map();function getData(key) {if (cache.has(key)) {return cache.get(key);}const data = fetchDataFromServer(key); // 假設從服務器獲取數據cache.set(key, data);return data;
}

5. Map 與 Object 的對比

特性MapObject
鍵的類型任意類型字符串或 Symbol
鍵的順序插入順序不一定
大小通過 size 屬性獲取需要手動計算
性能頻繁增刪時性能更好靜態鍵值對時性能更好
默認鍵有原型鏈上的默認鍵

6. 總結

  • new Map() 用于創建鍵值對集合,支持任意類型的鍵,并維護插入順序。
  • 適用場景
    • 需要復雜鍵(如對象、函數)。
    • 需要維護插入順序。
    • 需要頻繁增刪鍵值對。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73011.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust語言的集成測試

Rust語言的集成測試 引言 隨著軟件開發的不斷發展,測試已成為一個不可或缺的環節。特別是在系統復雜度日益增加的今天,確保代碼質量和穩定性變得尤為重要。Rust作為一門強調安全性和性能的編程語言,其測試框架提供了豐富的工具來幫助開發者…

手寫簡單的Spring基于注解配置的程序

需求說明: 自己寫一個簡單的 Spring 容器, 通過讀取類的注解(Component ControllerService Reponsitory) ,將對象注入到 IOC 容器,自己使用 IOAnnotaion反射集合 技術實現 思路分析: 一、新建一個包component并在包下創建bean類 …

WSL 導入完整系統包教程

作者: DWDROME 配置環境: OS: Ubuntu 20.04.6 LTS on Windows 11 x86_64Kernel: 5.15.167.4-microsoft-standard-WSL2ros-noetic 🧭WSL 導入完整系統包教程 ? 一、準備導出文件 假設你已有一個 .tar 的完整系統包(如從 WSL 或 L…

使用selenium來獲取數據集

使用selenium來獲取數據集 1、下載最新的chrome瀏覽器與chromedriver.exe 查看chrome的版本,打開谷歌瀏覽器,點擊右上角的三個點,然后點擊【幫助】, 點擊【關于Google Chrome】 然后去下載同樣為134版本號的chromedriver.exe, 網址:https://googlechromelabs.github.…

(二)VMware:VMware虛擬機安裝CentOS教程

目錄 1、準備CentOS 7鏡像1.1、官網鏡像下載1.2、清華大學開源鏡像下載?1.3、阿里云開源鏡像下載 2、使用 VMware安裝CentOS 72.1、創建虛擬機2.2、選擇自定義安裝2.3、硬件兼容性,保持默認2.4、選擇下載的ISO鏡像2.5、設置虛擬機名稱以及存放磁盤位置2.6、按照需求…

【Agent】Dify Docker 安裝問題 INTERNAL SERVER ERROR

總結:建議大家選擇穩定版本的分支,直接拉取 master 分支,可能出現一下后面更新代碼導致缺失一些環境內容。 啟動報錯 一直停留在 INSTALL 界面 我是通過 Docker 進行安裝的,由于項目開發者不嚴謹導致,遇到一個奇怪的…

MySQL -- 復合查詢

數據庫的查詢是數據庫使用中比較重要的環節,前面的基礎查詢比較簡單,不做介紹,可自行查閱。本文主要介紹復合查詢,并結合用例進行講解。 本文的用例依據Soctt模式的經典測試表,可以自行下載,也可以自己創建…

flutter 開發web端的性能優化

參考資料 Flutter for Web 首次首屏優化 ——JS 分片優化_main.dart.js-CSDN博客文章瀏覽閱讀1.4k次。本文介紹了如何通過延遲加載組件和js分片優化Flutter for Web應用的加載速度。在實踐中,通過按需加載減少js文件大小,使用并行加載提升加載效率。通過…

編譯安裝redis,systemtcl配置redis自啟動,系統并發調優

編譯安裝redis,systemtcl配置redis自啟動,系統并發調優 1、編譯安裝redis wget https://download.redis.io/releases/redis-7.4.2.tar.gz tar -zxf redis-7.4.2.tar.gz cd redis-7.4.2/ make make install/usr/local/bin/redis-server -v2、systemtcl配…

firefly經典藍牙和QProcess、QFileSystemWatcher記錄

QProcess 默認不會啟動一個 shell 來解析命令,而是直接調用操作系統的系統調用來啟動外部程序。也就是通過fork一個子線程或者exec一個子進程來執行命令。 QProcess的參數模式 QProcess 需要明確指定命令的可執行文件路徑或參數列表。 如果命令是一個可執行文件的路徑…

Java定時任務的三重境界:從單機心跳到分布式協調

《Java定時任務的三重境界:從單機心跳到分布式協調》 本文將以生產級代碼標準,揭秘Java定時任務從基礎API到分布式調度的6種實現范式,深入剖析ScheduledThreadPoolExecutor與Quartz Scheduler的線程模型差異,并給出各方案的性能壓…

QT QML實現音頻波形圖進度條,可點擊定位或拖動進度

前言 本項目實現了使用QT QML創建一個音頻波形圖進度條的功能。用戶可以在界面上看到音頻波形圖,并且可以點擊進度條上的位置進行定位,也可以拖動進度條來調整播放進度。可以讓用戶更方便地控制音頻的播放進度,并且通過音頻波形圖可以直觀地…

高速網絡包處理,基礎網絡協議上內核態直接處理數據包,XDP技術的原理

文章目錄 預備知識TCP/IP 網絡模型(4層、7層)iptables/netfilterlinux網絡為什么慢 DPDKXDPBFPeBPFXDPXDP 程序典型執行流通過網絡協議棧的入包XDP 組成 使用 GO 編寫 XDP 程序明確流程選擇eBPF庫編寫eBPF代碼編寫Go代碼動態更新黑名單 預備知識 TCP/IP…

[每周一更]-(第137期):Go + Gin 實戰:Docker Compose + Apache 反向代理全流程

文章目錄 **1. Go 代碼示例(main.go)****2. Dockerfile 多段構建**3.構建 Docker 鏡像**4. docker-compose.yml 直接拉取鏡像****5. 運行容器****6. 測試 API**7、配置域名訪問**DNS解析:將域名轉換為IP地址****DNS尋址示例** 8.錯誤記錄 訪問…

SpringMVC基本使用

SpringMVC是什么? Spring MVC 是 Spring 框架中的一個模塊,用于構建基于 MVC(Model-View-Controller)設計模式的 Web 應用程序。它分離了應用程序的業務邏輯、用戶界面和用戶輸入,使開發更加模塊化和易于維護。 核心…

Qt之MVC架構MVD

什么是MVC架構: MVC模式(Model–view–controller)是軟件工程中的一種軟件架構模式,把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controll…

Stream 流中 flatMap 方法詳解

🎯 1. flatMap() 到底是啥? flatMap() 是 Stream 里的中間操作,它的作用可以分兩步理解: 第一步:對流里的每個元素,先**映射(轉換)**成一個 Stream。第二步:把多個子流…

(C語言)理解 回調函數 和 qsort函數

一. 回調函數 1. 什么是回調函數? 回調函數(Callback Function)是通過 函數指針 調用的函數。其本質是: 將函數作為參數傳遞給另一個函數,并在特定條件下被調用,實現 反向控制。 2. 回調函數的使用 回調函…

vscode記錄

vs code 下載安裝,git 配置,插件安裝_vscode安裝git插件-CSDN博客 手把手教你在VS Code中使用 Git_vscode如何輸入git命令-CSDN博客 VS Code | 如何快速重啟VS Code?_vscode 怎么一鍵全部重啟-CSDN博客 1,安裝插件與git集成 2&am…

唯品會商品詳情頁架構設計與實現:高并發場景下的技術實踐?

引言 唯品會作為國內領先的電商平臺,其商品詳情頁需要應對海量用戶的高并發訪問,同時保證低延遲和高可用性。本文將從架構設計、數據庫優化、緩存策略、前端渲染等方面,結合代碼示例,深入解析唯品會商品詳情頁的技術實現。 一、…