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

  • 需要频繁对键值对进行增删改查操作。
  • 键的类型不止是字符串或符号。
  • 需要保持插入顺序,或者需要知道元素的个数。
相关推荐
黄智勇10 分钟前
xlsx-handlebars 一个用于处理 XLSX 文件 Handlebars 模板的 Rust 库,支持多平台使
前端
brzhang1 小时前
为什么 OpenAI 不让 LLM 生成 UI?深度解析 OpenAI Apps SDK 背后的新一代交互范式
前端·后端·架构
brzhang2 小时前
OpenAI Apps SDK ,一个好的 App,不是让用户知道它该怎么用,而是让用户自然地知道自己在做什么。
前端·后端·架构
井柏然3 小时前
前端工程化—实战npm包深入理解 external 及实例唯一性
前端·javascript·前端工程化
IT_陈寒3 小时前
Redis 高性能缓存设计:7个核心优化策略让你的QPS提升300%
前端·人工智能·后端
井柏然3 小时前
从 npm 包实战深入理解 external 及实例唯一性
前端·javascript·前端工程化
羊锦磊4 小时前
[ vue 前端框架 ] 基本用法和vue.cli脚手架搭建
前端·vue.js·前端框架
brzhang4 小时前
高通把Arduino买了,你的“小破板”要变“AI核弹”了?
前端·后端·架构
她说..4 小时前
通过git拉取前端项目
java·前端·git·vscode·拉取代码
智能化咨询4 小时前
玩转ClaudeCode:通过Chrome DevTools MCP实现高级调试与反反爬策略
前端·chrome·chrome devtools