JavaScript 中什么应用场景下必须用 map 而不是对象来实现功能

前言

很多情况下,能用 map 实现的功能用对象也可以实现,都是基于键值对,但是在一些情况下,必须要使用 map 才可以。
在这里插入图片描述

必须用 map 而不是 object 的情况

  • 键的类型不限:普通对象的键总是被转换为字符串或者 Symbols,这意味着如果你需要使用非字符串(如对象、数组、NaN等)作为键值,那么 Map 是更好的选择。
  • 键值对的插入顺序:Map 中的键值对会保持插入的顺序,这不同于普通对象。在实现需要顺序信息的功能时,Map 就显得尤为有用。
  • 性能:如果频繁地进行添加和删除键值对的操作,Map 会提供更好的性能。普通对象在频繁删除和添加属性时可能会导致性能下降。
  • 键的数量:Map 直接提供了一个 size 属性来获取元素数量,而普通对象需要手动计算属性的数量。
  • 迭代:Map 是一个内置可迭代对象,可以直接使用 for…of 循环来迭代它的键值对,以及 Map.prototype.forEach 方法。虽然对象也可以通过 Object.keys、Object.values 或 Object.entries 迭代,但这需要额外的步骤,并且不保留插入顺序。
  • 无需原型:普通对象继承自 Object.prototype,可能包含不希望作为数据出现的额外键。使用 Object.create(null) 可以创建一个没有原型的对象,但这样没有 Map 自带的方法。
  • 清晰的信号:在代码中使用 Map 可以为其他开发者发出一个明确的信号:这里处理的是键值对集合,而不是结构体或其他类型的对象。

举个例子,假设你有一个用户 ID 到用户对象的映射,并且用户 ID 来自数据库,可能是数字或复杂对象,你还需要保留这些用户的插入顺序和快速确定用户数量,那么 Map 就是一个很合适的选择。

let user1 = { name: 'Alice' };
let userMap = new Map();
userMap.set(user1, 'userData1');// user1 可以是复杂对象、数组等,而不仅仅是字符串或数字
// Map 会根据插入的顺序来迭代

在实现依赖于上述特性的逻辑时,使用 Map 基本上是必须的。然而,需要注意的是 Map 和对象都有各自的使用场景,在应用程序中应该根据具体需求选择使用哪一个。

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

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

相关文章

C#简单工厂模式的实现

using System.Diagnostics.Metrics; using System.Runtime.InteropServices; using static 手写工厂模式.Program;namespace 手写工厂模式 {internal class Program{public interface eats {void eat();}//定义了一个接口public class rice : eats{public void eat() {Console.…

Qt快速入门(Opencv小案例之人脸识别)

Qt快速入门(Opencv小案例之人脸识别) 编译出错记录 背景 因为主要使用qt,并且官网下载的win版本的编译好的opencv默认是vc的,所以我们需要自己下载opencv的源码使用mingw自行编译,我直接使用的vscode。 报错 报错…

【JavaWeb】Day43.MySQL概述——索引

介绍 索引(index):是帮助数据库高效获取数据的数据结构 。简单来讲,就是使用索引可以提高查询的效率。 优点: 1. 提高数据查询的效率,降低数据库的IO成本。 2. 通过索引列对数据进行排序,降低数据排序的成本&#…

C++系列-C++前言

什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序,对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适,为了解决软件危机,20世纪80年代,计算机界提出…

Python 编程 深入了解内存管理机制、深拷贝与浅拷贝

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、对象和引用、内存管理机制 Python 中的一切都是对象,包括数字、字符串、列表和函数等。为了简化内存管理并提高效率,Python 采用了统一的对象模型。在这个模型中&#xff0c…

【考研数学】看张宇的书,高效自学攻略

张宇老师的课程,我建议还是认真听一下 因为张宇老师视频课并不是照本宣科的读讲义,他是真的有自己的教学方法 讲义上的概念,老师自己会在A4纸上带大家过一遍,并且遇到关键的知识点,老师会强调 张宇老师还会帮我们记…

[C语言][数据结构][链表] 双链表的从零实现!

目录 零.必备知识 0.1 一级指针 && 二级指针 0.2 双链表节点的成员列表 a. 数据 b. 后驱指针 c. 前驱指针 0.3 动态内存空间的开辟 一. 双链表的实现与销毁 1.1 节点的定义 1.2 双向链表的初始化 && 创建新节点 1.3 尾插 1.4 头插 1.5 尾删 1.6 头删 1…

MySQL8.0.36-社区版:错误日志(2)

mysql有个错误日志,是专门记录错误信息的,这个功能默认是开启的 一般都是在/var/log/mysqld.log 日志中存放 1.错误日志的位置 首先我们使用命令去查看一下,这个错误日志文件究竟在哪 进入到mysql中,使用命令 show variables…

二叉树遍历(前序创建|中序遍历)

牛客题目链接 目录 1.解题思路 1.1中序遍历打印 ​1.2前序创建二叉树 1.3注意点 博主这里用的是java实现 随手记一个知识: hasNext读取到空格或者换行符会结束 hasNextLine读取到换行符才会结束(空格不会退出) 为什么要强调这个呢? …

Vivado Design Suite中的增量实现和增量模式

Vivado Incremental(增量)是Xilinx FPGA设计工具中的一种功能,它允许对设计的一部分进行修改和重新编译,而不需要对整个设计进行重新编译。这种增量式的方法可以显著减少编译时间,特别是在进行小的修改或迭代开发时。 …

std::stringstream

std::stringstream 是 C 标准库中的一个类,用于对字符串进行输入输出操作,类似于文件流(std::ifstream 和 std::ofstream)。它允许你像使用 std::cin 和 std::cout 一样使用字符串。 std::stringstream 可以将字符串作为输入源&am…

ThreadPoolExecutor线程池解析

ThreadPoolExecutor线程池解析 一、ThreadPoolExecutor常见参数 jdk中Executors提供了几种常用的线程池,底层都是ThreadPoolExecutor。 public ThreadPoolExecutor(int corePoolSize,//核心线程数int maximumPoolSize,// 最大线程数long keepAliveTime,//非核心线程…

大数据产品有哪些分类?各类里知名大数据产品都有哪些?

随着互联网技术的持续进步和全球数字化转型的推进,我们正处于一个数据爆炸的时代。在这样的大背景下,大数据已经逐渐崭露头角,成为了推动各行各业发展的关键因素和核心资源。大数据不仅仅是指数据的规模巨大,更重要的是它蕴含的价…

量子信息产业生态研究(一):关于《量子技术公司营销指南(2023)》的讨论

写在前面。量子行业媒体量子内参(Quantum Insider)编制的《量子技术公司营销指南》是一本实用的英文手册,它旨在帮助量子科技公司建立有效的营销策略,同时了解如何将自己定位成各自的行业专家。本文对这篇指南的主要内容进行了翻译…

ubuntu上安装截图工具-Flameshot及其使用步骤说明

Flameshot 火焰截图-推荐 安装命令: sudo apt install flameshot 操作方式: 1)打开 2)右上角弹窗 3)点击后弹出 选择进行截图 4)截图后再选择分享 5)再重新选择区域,出现编辑…

【蓝桥杯】2024年第15届真题题目

试题 A: 握手问题 本题总分: 5 分 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手(且仅有一次&a…

CMD 汉字乱码处理

windows 11 cmd汉字乱码问题处理 一 查看CMD编码 win R 输入 cmd 输入 chcp 查看回显信息 “936”代表的意思就是 GBK (汉字内码扩展规范),通常情况下GBK也是cmd的默认编码。 解决乱码需要把编码改为 utf-8 二 临时修改 在 终端中输入 chcp 65001 三 永久修改…

蓝桥杯嵌入式第十五届省赛真题题目

蓝桥杯昨天也考完了,大家可以看看题目 客观题题目 程序题题目

【Python函数和类4/6】递归与匿名函数

目录 目标 匿名函数 多个形参 匿名函数的局限性 递归 语言例子 数学例子 递归的实现 递归代码 练习 总结 目标 在之前的博客中,我们学习了定义函数、调用函数以及设置函数的参数。在今天,我们会补充函数的两个常见的知识点,一个是匿…

学浪视频怎么缓存?

缓存学浪视频轻而易举!推荐使用“小浪助手”,一款便捷的工具,助你轻松实现。工具已经预先打包好,需要的朋友可以自行下载。快试试,畅享学习吧! 学浪下载器链接:https://pan.baidu.com/s/1y7vcq…