谈谈es6 Map 函数

发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。


Map 是 ES6 中引入的一种新的数据结构,它类似于对象(Object),但与对象相比,Map 提供了更多的灵活性和功能。Map 用来存储键值对(key-value pairs),并且它的键可以是任何类型,而不仅仅是字符串或符号。相较于普通对象,Map 在很多方面提供了更好的性能和更方便的API。

基本概念

  • Map 是一种集合(collection),其中每个元素都由一个键(key)和一个值(value)组成。
  • Map 中,键和值都是任意类型的,比如:对象、函数、数组等。
  • 与普通对象不同,Map 中的键值对是有序的,即插入的顺序会被保存下来。

创建 Map 实例

javascript 复制代码
let myMap = new Map();  // 创建一个空的 Map 实例

你也可以在创建时直接传入一个二维数组(数组的每个元素是一个由键值对组成的数组)来初始化 Map

javascript 复制代码
let myMap = new Map([
  ['name', 'Alice'],
  ['age', 25],
  ['job', 'developer']
]);

常用方法

1. .set(key, value)

set 方法用于向 Map 添加新的键值对。如果键已经存在,则会更新该键对应的值。

javascript 复制代码
let map = new Map();
map.set('name', 'Alice');
map.set('age', 25);
map.set('job', 'developer');
console.log(map);
// Map(3) { 'name' => 'Alice', 'age' => 25, 'job' => 'developer' }

2. .get(key)

get 方法用于根据键获取对应的值。如果该键不存在,返回 undefined

javascript 复制代码
console.log(map.get('name'));  // 输出 'Alice'
console.log(map.get('address'));  // 输出 undefined

3. .has(key)

has 方法检查 Map 中是否存在某个键,返回 truefalse

javascript 复制代码
console.log(map.has('name'));  // 输出 true
console.log(map.has('address'));  // 输出 false

4. .delete(key)

delete 方法用于删除 Map 中指定键值对。如果该键存在,返回 true,否则返回 false

javascript 复制代码
map.delete('age');
console.log(map.has('age'));  // 输出 false

5. .clear()

clear 方法用于删除 Map 中的所有键值对。

javascript 复制代码
map.clear();
console.log(map.size);  // 输出 0

6. .size

size 是一个属性,用来获取 Map 中键值对的数量。

javascript 复制代码
let map = new Map();
map.set('name', 'Alice');
map.set('age', 25);
console.log(map.size);  // 输出 2

7. .keys(), .values(), .entries()

这些方法分别返回 Map 中所有键、所有值、所有键值对的迭代器。

  • .keys() 返回一个迭代器,包含 Map 中的所有键。
  • .values() 返回一个迭代器,包含 Map 中的所有值。
  • .entries() 返回一个迭代器,包含 Map 中的所有键值对。
javascript 复制代码
let map = new Map([
  ['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
}

8. .forEach(callback)

forEach 方法用于遍历 Map 中的所有键值对,参数是一个回调函数,该函数接收三个参数:valuekeymap

javascript 复制代码
let map = new Map([
  ['name', 'Alice'],
  ['age', 25]
]);

map.forEach((value, key) => {
  console.log(key, value);
});
// 输出:
// name Alice
// age 25

特点总结

  1. 键可以是任意类型Map 的键可以是任何数据类型,包括对象、数组、函数等。
  2. 插入顺序Map 会保持键值对的插入顺序,可以通过 .keys().values().entries() 获取到有序的迭代结果。
  3. 性能优势 :相比于对象,Map 在频繁的增删查改操作中通常表现得更好,因为 Map 是为存储键值对而优化的,而对象更多是为了属性访问而设计。
  4. 大小和删除Map 具有 .size 属性,可以随时查询元素的数量;并且可以通过 .delete() 删除单个元素,或者使用 .clear() 删除所有元素。
  5. 更方便的 APIMap 提供了许多方便的内建方法,能够使得对键值对的操作更加灵活和高效。

与对象的区别

  • 键类型 :对象的键只能是字符串或符号,而 Map 的键可以是任意类型。
  • 顺序Map 会保留元素的插入顺序,而对象的键并不保证有序。
  • 性能Map 的性能通常更优,尤其是在频繁操作键值对时。

使用场景

Map 适合用于以下情况:

  • 需要频繁对键值对进行增删改查操作。
  • 键的类型不止是字符串或符号。
  • 需要保持插入顺序,或者需要知道元素的个数。
相关推荐
小白_ysf3 分钟前
Vue 中常见的加密方法(对称、非对称、杂凑算法)
前端·vue.js·算法
人工智能训练6 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
会跑的葫芦怪7 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9228 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233228 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头882110 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas13610 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠10 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
珑墨11 小时前
【Turbo】使用介绍
前端
军军君0111 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three