JS数据类型——【Map】精讲

JavaScript 中的 Map 是一种用于存储键值对的集合,它与传统的对象(Object)类似,但提供了更丰富的功能和灵活性。以下是 Map 相关的主要知识点:

1. 基础概念

  • 键值对存储Map 使用键值对的形式存储数据,任何值(对象或基本类型)都可以作为键或值,而对象的键只能是字符串或符号。
  • 有序性Map 中的键值对是按插入顺序排列的,这意味着遍历 Map 时会按添加顺序返回键值对。
  • 键的类型:在 Map 中,键可以是任何类型,包括对象、函数、甚至是 undefinedNaN

2. 创建与初始化

  • 创建空的 Map
    const map = new Map();
    
  • 使用二维数组初始化 Map
    const map = new Map([['key1', 'value1'],['key2', 'value2']
    ]);
    

3. 基本操作

  • 设置键值对:使用 set 方法添加或更新键值对。
    map.set('key', 'value');
    
  • 获取值:使用 get 方法根据键获取对应的值。如果键不存在,则返回 undefined
    const value = map.get('key');
    
  • 检查键是否存在:使用 has 方法检查 Map 中是否存在某个键。
    const hasKey = map.has('key');
    
  • 删除键值对:使用 delete 方法删除某个键值对,成功删除返回 true,否则返回 false
    const success = map.delete('key');
    
  • 清空 Map:使用 clear 方法清空所有键值对。
    map.clear();
    

4. 遍历 Map

  • 遍历键值对:可以使用 for...of 循环、forEach 方法或直接通过迭代器遍历 Map 中的键值对。
    // 使用 for...of
    for (let [key, value] of map) {console.log(`${key}: ${value}`);
    }// 使用 forEach
    map.forEach((value, key) => {console.log(`${key}: ${value}`);
    });
    
  • 获取键、值或键值对的迭代器
    const keys = map.keys();       // 获取所有键的迭代器
    const values = map.values();   // 获取所有值的迭代器
    const entries = map.entries(); // 获取所有键值对的迭代器
    

5. 属性与方法

  • 大小 (size)size 属性返回 Map 中键值对的数量。
    const size = map.size;
    
  • Map vs Object
    • Map 允许非字符串类型的键,而 Object 的键只能是字符串或符号。
    • Map 保持键值对的插入顺序,Object 没有顺序。
    • Map 的原型上没有默认的方法或属性,不会像 Object 那样继承原型链上的属性。

6. 常见用例

  • 对象作为键:可以使用对象作为键来存储复杂的数据结构。
    const objKey = { id: 1 };
    const map = new Map();
    map.set(objKey, 'Some value');
    console.log(map.get(objKey)); // 'Some value'
    

7. WeakMap

  • WeakMap:类似于 Map,但其键必须是对象,并且键对值的引用是弱引用,这意味着如果没有其他引用,键值对会被垃圾回收。WeakMap 不支持迭代。

总结起来,Map 在需要高效、有序地存储和检索键值对,且键可以是任意类型时,是比 Object 更为合适的数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入名字转换成对象

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>输入名字转换成对象</title> </head>…

力扣算法总结

直接放别人简单易懂的总结&#xff0c;比我自己描述得好 代码随想录 (programmercarl.com) 崔添翼 (Tianyi Cui) 背包问题九讲 2.0 beta1.2 - jggnice! - 博客园 (cnblogs.com) 1.01背包 优化成一维就是利用之前上一维计算出来的数据&#xff0c;在不损害后面还要用的上一维…

在IAR开发环境下将尽可能多的代码重定向到RAM中执行的方法

今天给大家分享的是在IAR开发环境下将尽可能多的代码重定向到RAM中执行的方法。 最近和同事在讨论一个客户案例&#xff0c;客户 APP 工程是基于 IAR 开发环境&#xff0c;客户希望将工程里尽可能多的代码都重定向到 RAM 里执行&#xff0c;仅留必要或者指定的源文件代码在 Fl…

HTML5 浏览器支持

HTML5 浏览器支持 HTML5是最新版本的HTML&#xff0c;它引入了许多新特性&#xff0c;旨在更好地适应丰富的网络内容和服务。然而&#xff0c;由于浏览器的更新和兼容性问题&#xff0c;HTML5的浏览器支持情况可能会有所不同。本文将探讨HTML5的主要特性以及在不同浏览器上的支…

RabbitMQ(面试篇)

目录 MQ是什么 MQ的优点 消息队列有什么缺点 什么是RabbitMQ&#xff1f; rabbitMQ的使用常见 RabbitMQ基本概念 大家一起加油 &#xff01;&#xff01;&#xff01; MQ是什么 MQ是消息队列&#xff0c;是软件和软件之间同行的中间件产品 MQ的优点 异步处理&#xff0c…

【前端基础篇】JavaScript之BOM介绍

文章目录 浏览器对象模型&#xff08;BOM&#xff09;介绍1. 什么是BOM&#xff1f;2. Window 对象2.1 弹出框2.1.1 警告框2.1.2 确认框2.1.3 提示框 2.2 定时事件2.2.1 延时器2.2.2 定时器 2.3 Window 对象其他常用属性与方法2.3.1 获取窗口尺寸2.3.2 打开新窗口与关闭窗口2.3…

【习题】构建更加丰富的页面

判断题 1. Tabs组件可以通过接口传入一个TabsController&#xff0c;该TabsController可以控制Tabs组件进行页签切换。 A、正确(True) B、错误(False) 2. WebviewController提供了变更Web组件显示内容的接口&#xff0c;例如可以使用loadData来加载一个网页链接地址改…

【JS|第25期】探索HTTP POST请求:请求体的演变与应用

日期&#xff1a;2024年8月16日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

iOS RunLoop

一:什么是Runloop Runloop&#xff0c;正如其名&#xff0c;loop表示某种循环&#xff0c;和run放在一起就表示一直在运行着的循环 二:Runloop的创建? iOS并没有提供Runloop的创建方法,因为创建了现场自然会有一个Runloop. 所以只有获取Runloop的方法: NSRunLoop * runloo…

Leetcode 3267. Count Almost Equal Pairs II

Leetcode 3267. Count Almost Equal Pairs II 1. 解题思路2. 代码实现 题目链接&#xff1a;3267. Count Almost Equal Pairs II 1. 解题思路 这一题同样是题目3265. Count Almost Equal Pairs I的进阶版本。 它主要的区别在于说&#xff1a; 最大的操作次数增加到两次&am…

C# 循环访问目录树详解与示例

文章目录 一、目录树遍历的概念二、使用System.IO命名空间三、DirectoryInfo和FileInfo类四、递归遍历目录树五、示例&#xff1a;列出目录树中的所有文件和文件夹六、异常处理七、迭代方法八、总结 在C#中&#xff0c;访问文件系统是常见的需求之一。有时我们需要遍历目录树以…

kafak集群搭建-基于zookeeper方式

kafak集群搭建-基于zookeeper方式 1、准备3个kafka2、修改配置文件2.1、修改配置文件 3、启动测试3.1、先启动zookeeper3.2、再启动三台kafka 4、SpringBoot集成kafka集群4.1、项目配置文件application.yml4.2、kafka配置类4.3、启动SpringBoot程序 5、kafka集群架构分析6、查看…

学习能力与研究能力

摘要: 学习就像搭金字塔, 研究就像挖井. 1. 什么是学习 学习 (study) 是获得技能、知识、方法的过程. 学习有两种模式: 一是直接获得前人总结的经验; 二是从数据中总结规律. 2. 什么是研究 研究 (research) 是对已有或新的问题进行探索, 获得新技能、新知识、新方法的过程.…

【kubernetes】相关pod的创建和命令

【书写方法】&#xff1a; 管理使用k8s集群时&#xff0c;创建资源的Yaml文件非常重要&#xff0c;如何快速手写呢&#xff1f; 根据命令提示书写&#xff1a; kubectl explain [资源名称]例如打算写pod资源文件时&#xff0c;可查看如下&#xff1a; # 查看pod下所有字段 …

IO多路复用,select、poll和epoll简介

文章目录 前言1、select2、poll3、epoll4、总结 前言 select、poll 和 epoll 是 Linux 下用于多路复用 I/O&#xff08;Input/Output&#xff09;的系统调用&#xff0c;它们用于监视多个文件描述符&#xff0c;以查看哪个文件描述符上有可读、可写或发生了异常的事件。 1、sel…

python之多线程和多进程以及threading和multiprocessing模块

在 Python 中&#xff0c;多线程和多进程是实现并发编程的两种主要方式。多线程适用于 I/O 密集型任务&#xff0c;而多进程适用于 CPU 密集型任务。Python 提供了 threading 模块用于多线程编程&#xff0c;提供了 multiprocessing 模块用于多进程编程。 多线程 基本用法 使…

深度学习100问9-什么是word2vec模型

Word2vec 模型是一种用于将词语转换为向量表示的工具。 想象一下&#xff0c;我们有很多很多的词语&#xff0c;就像一个个不同的小盒子。Word2vec 模型的作用就是给每个小盒子都找到一个对应的位置&#xff0c;这个位置用一个向量来表示。这样&#xff0c;意思相近的词语在这…

Google Colab快速使用

Google Colab快速使用 1. 引言2. Jupyter笔记本的创建3. 上传代码和数据集4. Colab常规指令 1. 引言 Google Colab是谷歌提供的免费Jupyter&#xff0c;很类似于Linux系统这些在终端界面操纵的感觉&#xff0c;不需要深度学习环境配置就可以使用&#xff0c;完全基于云端运行。…

Shell输出、重定向与管道符

Shell输出、重定向与管道符 1、Shell输出1.1、标准输入输出1.2、echo指令1.3、print与printf指令 2、Shell重定向3、Shell管道符 由于Shell脚本批处理的特殊性&#xff0c;其大部分操作过程位于后台&#xff0c;不需要用户进行干预&#xff0c;因此&#xff0c;使用重定向和管道…

在Windows Server 2012 R2上安装.NET Framework 3.5

在Windows Server 2012 R2上安装.NET Framework 3.5&#xff0c;可以按照以下步骤进行&#xff1a; 打开服务器管理器&#xff1a; 首先&#xff0c;登录到Windows Server 2012 R2的服务器。然后&#xff0c;打开“服务器管理器”。添加角色和功能&#xff1a; 在“服务器管理…