【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 笔记
  • 数据结构

在这里插入图片描述

相关内容

热门资讯

三分钟辅助“佛手在线辅助”开挂... 三分钟辅助“佛手在线辅助”开挂(透视)辅助脚本解密教程-哔哩哔哩1、下载安装好佛手在线辅助,进入游戏...
科技通报“决战卡五星看牌器”附... 科技通报“决战卡五星看牌器”附开挂工具辅助详细教程;无需打开直接搜索打开薇:136704302 咨询...
教程辅助“桂林字牌辅助”开挂(... 桂林字牌辅助是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微信(...
八分钟辅助“悠悠互娱辅助”开挂... 八分钟辅助“悠悠互娱辅助”开挂(透视)辅助挂黑科技教程-知乎;亲,悠悠互娱辅助这款游戏原来确实可以开...
玩家必备科技“中至赣州冲关小程... 玩家必备科技“中至赣州冲关小程序辅助”附开挂插件辅助详细教程 了解更多开挂安装加(136704302...
教程辅助“王重阳小程序辅助器”... 教程辅助“王重阳小程序辅助器”开挂(透视)辅助工具-哔哩哔哩 【无需打开直接搜索加薇13670430...
详细辅助“宝宝游戏辅助”开挂(... 详细辅助“宝宝游戏辅助”开挂(透视)辅助神器技巧教程-哔哩哔哩这是一款可以让一直输的玩家,快速成为一...
玩家必知教程“新道游科技透视收... 玩家必知教程“新道游科技透视收费”附开挂下载辅助详细教程《详细加薇136704302咨询》游戏特色:...
教程辅助“中至赣牌圈黑科技”开... 教程辅助“中至赣牌圈黑科技”开挂(透视)辅助插件-知乎;打开点击测试直接进入微信(136704302...
九分钟辅助“道游互娱辅助”开挂... 九分钟辅助“道游互娱辅助”开挂(透视)辅助挂德州教程-知乎;无需打开直接搜索微信(136704302...