谈谈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 适合用于以下情况:

  • 需要频繁对键值对进行增删改查操作。
  • 键的类型不止是字符串或符号。
  • 需要保持插入顺序,或者需要知道元素的个数。
相关推荐
GISer_Jing2 小时前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪3 小时前
CSS复习
前端·css
咖啡の猫5 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲7 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5818 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路8 小时前
GeoTools 读取影像元数据
前端
ssshooter8 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
Jerry9 小时前
Jetpack Compose 中的状态
前端
dae bal10 小时前
关于RSA和AES加密
前端·vue.js
柳杉10 小时前
使用three.js搭建3d隧道监测-2
前端·javascript·数据可视化