当前位置:网站首页 > 编程语言 > 正文

数组方法map有返回值么(数组方法map有返回值么为什么)



在 JS 中 对象是 的一个 :

  1. 中 都可以作为一个键或一个值
  2. 中每个元素是有顺序的, 它能够记住每个元素首次
  3. 同 在 中的一个键只能出现一次, 它在 的集合中是独一无二的
  4. 同时 内部实现了 接口, 其本身又是一个 , 可被 等语法进行迭代, 关于更多迭代器的相关知识可查阅 《迭代器、生成器详解🔥🔥🔥》

2.1 创建

创建一个 实例, 可直接通过 构造函数进行创建

 
  

如果我们需要在创建 实例时, 就给定初始值, 可传一个二维数组, 如下代码所示: 和 是 值, 和 是对应的

 
  

2.2 增、改、删、查

  1. 可通过 方法为 对象, 或 对应键值, 该方法返回当前 对象
 
  

由于 方法返回的是当前 对象, 所以实际上它是支持链式调用的, 上面代码可以修改为:

 
  
  1. 可通过 方法删除 中指定元素, 该方法返回一个布尔值, 表示是否删除成功
 
  
  1. 可通过 方法清除 中的所有元素, 该方法没有返回值
 
  
  1. 可通过 方法获取指定元素, 需要注意的是: 如果该元素是个对象, 那么获取到的将是对象的 , 也就是说对获取到的对象, 所做的任何更改都会同步修改到 中对应的值
 
  
  1. 可通过 方法判断 对象中指定元素是否存在, 该方法返回一个布尔值, 表示对应的元素是否存在
 
  
  1. 可通过 属性获取当前 对象中元素个数
 
  

由于 定义了 属性, 所以 实例对象是一个 对象, 我们可以使用所有可以操作可迭代对象的语法, 包括 、展开语法、解构语法、 等等, 并且每次迭代 对象拿到的值是一个 格式的数组

 
  

3.2 Map.prototype.forEach(callbackFn, thisArg)

可通过 方法进行循环, 同 该方法支持传 :

  • 参数 必填, 每次循环将执行该函数, 函数接收 个参数: (当前迭代的值)、(当前迭代的 )、(正在迭代的 对象)
  • 参数 选填, 将会被作为 函数的 指向
 
  

3.3 获取「keys」「values」「entries」迭代器

对象中我们可通过原型方法 、、 分别获取到 对象中 、 以及 的一个集合, 需要注意的是这个几个方法返回的是一个

 
  

实际上这几个方法返回的 本身又是一个 , 也就是它能够直接被 进行循环迭代

 
  

关于更多迭代器的相关知识可查阅 《迭代器、生成器详解🔥🔥🔥》

3.4 循环的顺序

对象是能够记住每次插入元素的顺序的, 后面修改值不会改变元素的顺序, 所以当我们循环 对象时, 每个元素输出的顺序是和它首次被插入的顺序保持一致的, 当然 、、 等方法拿到所有值的顺序也是和插入顺序保持一致

 
  
  1. 上文提到 对象本身就是一个 , 同时 构造函数是允许传入一个 作为初始值的, 所以其实我们是可以把一个 对象传给 构造函数, 创建一个新的 对象, 这个过程我们可以视为 对象的一个拷贝
 
  

需要特别注意的是, 👆🏻 提到的 实际上可以理解为是 , 如下代码, 如果元素 值是一个对象, 那么通过上述方式进行拷贝, 拷贝的是 的引用地址, 也就是拷贝前后 都是指向同一个对象, 如下代码:

 
  
  1. 对象间可以进行合并, 但是会保持键的唯一性, 否则前面的会被后面的覆盖, 如下代码所示: 尝试将 和 进行了合并, 同时 的 被 覆盖
 
  

在 中 和 类型, 它们都允许按 对数据进行存储、删除、修改…… 不过 和 还是存在一些重要的区别:

Map Object 意外的键 默认不包含任何键、只包含显式插入的键 存在原型, 原型链上的键名可能和对象上的设置的键名产生冲突 键的类型 可以是任意值 或 键的顺序 等于首次插入的顺序 键目前是有序的, 但这个顺序相对来说是复杂的、不可控的 Size 通过 属性直接获取 通过 计算获取 迭代 是个可迭代对象、可以直接被迭代 没有实现可迭代协议、不可以直接被迭代 性能 频繁增删键值对的场景下表现得更好 在频繁 添加和删除键值对的场景下未作出优化 序列化和解析 没有元素的序列化和解析的支持 支持使用 进行序列化、支持使用 解析序列化

6.1 缓存函数

如下代码, 可生成一个带有缓存功能的函数, 缓存函数会将每次请求参数和请求结果进行缓存, 当再次请求相同的参数时, 不会进行任何运算, 则是直接返回缓存中的结果

 
  

6.2 LRU 缓存

缓存: 即采用 使用的缓存策略, 它的原则是, 如果一个数据最近没有被访问到, 那么它将来被访问的几率也很小, 那么在有限的内存空间下我们就可以把长时间没有访问到的数据去除掉

如下代码, 利用 的 具有顺序的特性实现 缓存机制, 每次新增、修改、读取值时会将对应元素的缓存放到最后, 当缓存数量超出时会将第一个元素剔除

 
  

6.3 去重、计算、分组

借助于 可以是任意类型、并且键值唯一, 可用于对数据的去重、计数、分组……

 
  

7.1 Map 对象序列化

上文提到 对象是无法被 序列化、也无法被 反序列化的, 但实际上我们可以通过:

  1. 配置 的 参数, 实现 对象的自定义序列化
  2. 配置 的 参数, 实现 对象的反序列化
 
  

7.2 键相等性比较

我们都知道在 和 运算中, 不同的 是被视为不同的值

 
  

但是呢在 中关于 是基于 零值相等 算法, 也就是说 在比较键时不同的 是被视为同一个值, 同时 和 也是认为是同一个键

 
  

更多关于 JS 相等性概念可查阅 「我不知道的 JS」 相等性判断 🔥🔥🔥🔥

  1. 中 都可以作为一个键或一个值
  2. 中每个元素都是有序的, 是按照首次插入顺序
  3. 对象是个可迭代对象
  4. 在频繁增删键值对的场景下表现得更好
  5. 是不能够被 进行序列化的, 需要进行额外处理
  • MDN-Map
  • 如何实现一个缓存函数?
  • How do you JSON.stringify an ES6 Map?

image

到此这篇数组方法map有返回值么(数组方法map有返回值么为什么)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • dex反混淆工具(dex字符串反混淆)2025-07-26 23:54:08
  • enotfound(not found翻译成中文)2025-07-26 23:54:08
  • yml文件不生效(yml文件的作用)2025-07-26 23:54:08
  • 拆包鼠标都是二手吗(拆包鼠标都是二手吗知乎)2025-07-26 23:54:08
  • data文件访问限制怎么解除(data文件访问限制怎么解除华为)2025-07-26 23:54:08
  • xp虚拟机怎么联网(虚拟机xp系统怎么连接网络)2025-07-26 23:54:08
  • linux如何给目录重命名(linux怎么给目录改名)2025-07-26 23:54:08
  • ip地址计算工具(ip地址计算工具有哪些)2025-07-26 23:54:08
  • 颜色代码表查询(颜色代码查询器)2025-07-26 23:54:08
  • ad9154中文手册(ad9122手册)2025-07-26 23:54:08
  • 全屏图片