【JavaScript】`Map` 数据结构
创始人
2024-11-19 07:07:41
0

文章目录

    • 一、`Map` 的基本概念
    • 二、常见操作
    • 三、与对象的对比
    • 四、实际应用场景

在现代 JavaScript 中,Map 是一种非常重要且强大的数据结构。与传统的对象(Object)不同,Map 允许您使用各种类型的值作为键,不限于字符串或符号。这为开发者提供了更多的灵活性和效率。本文将详细介绍 Map 的基本概念、用法、常见操作以及与对象的对比,帮助您全面掌握这一数据结构。

一、Map 的基本概念

Map 是一种键值对集合,其中键和值都可以是任意类型。Map 保留了键值对的插入顺序,且键是唯一的,这意味着在同一个 Map 中,键不能重复。

创建一个 Map

可以使用 Map 构造函数来创建一个新的 Map 实例:

const map = new Map(); 

也可以通过传入一个二维数组来初始化 Map,数组中的每个元素都是一个包含两个值的数组,分别表示键和值:

const map = new Map([   ['key1', 'value1'],   ['key2', 'value2'] ]); 

二、常见操作

添加和获取元素

可以使用 set 方法添加键值对,使用 get 方法获取对应键的值:

const map = new Map(); map.set('name', 'Alice'); map.set('age', 25);  console.log(map.get('name')); // 输出: Alice console.log(map.get('age')); // 输出: 25 

检查键是否存在

可以使用 has 方法检查 Map 中是否存在某个键:

console.log(map.has('name')); // 输出: true console.log(map.has('address')); // 输出: false 

删除元素

可以使用 delete 方法删除某个键值对,使用 clear 方法删除所有键值对:

map.delete('age'); console.log(map.has('age')); // 输出: false  map.clear(); console.log(map.size); // 输出: 0 

获取键值对数量

可以使用 size 属性获取 Map 中键值对的数量:

console.log(map.size); // 输出: 2 

遍历 Map

Map 提供了多种遍历方法,可以使用 for...of 循环或内置的遍历方法如 keysvaluesentries

const map = new Map([   ['name', 'Alice'],   ['age', 25] ]);  for (let [key, value] of map) {   console.log(`${key}: ${value}`); } // 输出: // name: Alice // age: 25  for (let key of map.keys()) {   console.log(key); } // 输出: // name // age  for (let value of map.values()) {   console.log(value); } // 输出: // Alice // 25  for (let [key, value] of map.entries()) {   console.log(`${key}: ${value}`); } // 输出: // name: Alice // age: 25 

三、与对象的对比

尽管 Map 和对象在某些方面类似,但它们在使用场景和性能上有一些显著区别。

键的类型

对象的键只能是字符串或符号,而 Map 的键可以是任意类型,包括对象、函数、基本类型等:

const obj = {}; const map = new Map();  obj['key'] = 'value'; map.set('key', 'value');  obj[{}] = 'value'; // 键会被转换为字符串 '[object Object]' map.set({}, 'value'); // 键是对象的引用 

遍历顺序

Map 按照插入顺序保留键值对,而对象的键的遍历顺序可能会根据不同的 JavaScript 引擎有所不同。

性能

对于频繁增删键值对的操作,Map 通常比对象更高效。对象适用于结构化的静态数据,而 Map 更适合需要动态操作的场景。

四、实际应用场景

缓存

Map 可以用于缓存数据,以提高应用程序的性能:

const cache = new Map();  function fetchData(key) {   if (cache.has(key)) {     return cache.get(key);   } else {     const data = getDataFromAPI(key); // 假设这是一个从 API 获取数据的函数     cache.set(key, data);     return data;   } } 

计数

Map 适合用于对数据进行计数,如统计字符出现的次数:

const charCount = new Map(); const str = 'hello world';  for (let char of str) {   if (charCount.has(char)) {     charCount.set(char, charCount.get(char) + 1);   } else {     charCount.set(char, 1);   } }  console.log(charCount); // 输出: Map { 'h' => 1, 'e' => 1, 'l' => 3, 'o' => 2, ' ' => 1, 'w' => 1, 'r' => 1, 'd' => 1 } 

推荐我的相关专栏:

  • python 错误记录
  • python 笔记
  • 数据结构

在这里插入图片描述

相关内容

热门资讯

WPK透视辅助(wpK)微扑克... WPK透视辅助(wpK)微扑克ai辅助器苹果版(透视)靠谱教程(总是有挂)微扑克ai辅助器苹果版辅助...
黑科技中牌率!aa扑克辅助,a... 自定义aa扑克辅助系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是...
黑科技辅助!德州辅助软件开发定... 黑科技辅助!德州辅助软件开发定制,德州ai人工智能,必胜教程(先前真的有挂)1、许多玩家不知道辅助软...
aa扑克德州辅助工具(aapo... aa扑克德州辅助工具(aapokER)aapoker透明挂多久被封(辅助挂)透明教程(总是真的是有挂...
wepoke透明挂使用教程(w... wepoke透明挂使用教程(wEPOKE)we-poke有挂吗(黑科技)第三方教程(果然真的有挂)1...
黑科技脚本!aapoker辅助... 黑科技脚本!aapoker辅助使用教程,aapoker 辅助工具,微扑克教程(好像有挂);支持2-1...
德扑之星有系统新手保护期吗(德... 德扑之星有系统新手保护期吗(德扑)德扑ai决策软件(辅助挂)必赢方法(其实有挂)1、打开软件启动之后...
黑科技安卓版!aapoker有... 黑科技安卓版!aapoker有挂,aa扑克发牌机制,必备教程(原先真的是有挂);aa扑克发牌机制软件...
wepoke辅助软件靠谱吗(W... wepoke辅助软件靠谱吗(WepokE)wepoke是不是有辅助(黑科技)扑克教程(好像有挂);1...
黑科技辅助!wepokeai代... 黑科技辅助!wepokeai代打辅助,wopoker有没有外挂,黑科技教程(原先有挂);建议优先通过...