基本概念
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。
Map 对象是键值对的集合。Map 中的一个键只能出现一次;它在 Map 的集合中是独一无二的。Map 对象按键值对迭代——一个 for…of 循环在每次迭代后会返回一个形式为 [key,value] 的数组。迭代按插入顺序进行,即键值对按 set() 方法首次插入到集合中的顺序(也就是说,当调用 set() 时,map 中没有具有相同值的键)进行迭代。
api
静态属性
- size 属性:size属性返回 Map 结构的成员总数。
实例方法
-
set(key, value):set方法设置key所对应的键值,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
-
get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
-
has(key):has方法返回一个布尔值,表示某个键是否在 Map 数据结构中。
-
delete(key):delete方法删除某个键,返回 true 。如果删除失败,返回 false 。
-
clear():clear方法清除所有成员,没有返回值。
-
forEach():遍历 Map 的所有成员。
迭代方法
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回所有成员的遍历器。
Map.prototype[@@iterator]()
:返回一个新的迭代对象,其为一个包含 Map 对象中所有键值对的 [key, value] 数组,并以插入 Map 对象的顺序排列。
复制或合并 Maps
Map 能像数组一样被复制:
1const original = new Map([
2 [1, 'one'],
3]);
4
5const clone = new Map(original);
6
7console.log(clone.get(1)); // one
8console.log(original === clone); // false. 浅比较 不为同一个对象的引用
Map 对象间可以进行合并,但是会保持键的唯一性。
1const first = new Map([
2 [1, 'one'],
3 [2, 'two'],
4 [3, 'three'],
5]);
6
7const second = new Map([
8 [1, 'uno'],
9 [2, 'dos']
10]);
11
12// 合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的。
13// 展开语法本质上是将 Map 对象转换成数组。
14const merged = new Map([...first, ...second]);
15
16console.log(merged.get(1)); // uno
17console.log(merged.get(2)); // dos
18console.log(merged.get(3)); // three
Map 对象也能与数组合并:
1const first = new Map([
2 [1, 'one'],
3 [2, 'two'],
4 [3, 'three'],
5]);
6
7const second = new Map([
8 [1, 'uno'],
9 [2, 'dos']
10]);
11
12// Map 对象同数组进行合并时,如果有重复的键值,则后面的会覆盖前面的。
13const merged = new Map([...first, ...second, [1, 'eins']]);
14
15console.log(merged.get(1)); // eins
16console.log(merged.get(2)); // dos
17console.log(merged.get(3)); // three
个人笔记记录 2021 ~ 2025