概述
map集合专门用于存储多个键值对数据。
键值对(key value pair)数据集合的特点:键不可重复
在map出现之前,我们使用的是对象的方式来存储键值对,键是属性名,值是属性值。
使用对象存储数据有以下问题:
- 键名只能是字符串或符号;
- 获取数据的数量不方便;
- 键名容易跟原型链上的名称冲突
如何创建map?
new Map(); // 创建一个空的map
new Map(iterable); // 创建一个具有初始内容的map,初始内容来自可迭代对象每一次迭代的结果,但是,它要求每次迭代的结果必须是一个长度为2的数组,数组第一项表示键,数组的第二项表示值
const map1 = new Map([['a', 1], ['b', 2]]);
如何进行后续操作?
- size: 只读属性,获取当前map中键的数量
- set(键,值):设置一个键值对,键和值可以是任何类型
- 如果键不存在,则添加一项;
- 如果键已存在,则修改它的值
- 比较键的方式和set相同(Object.is)
- get(键):根据一个键得到对应的值
- has(键):判断某个键是否存在
- delete(键):删除指定的键
- clear():清空map
const map1 = new Map([['a', 1], ['b', 2]]);
const obj = {};
map1.set('c',456);
map1.set({},123);
map1.set({},456);
console.log(map1.size); // 5
map1.set(obj,456);
map1.set(obj,789);
console.log(map1.size); // 6
分析:
- {} 和 {} 是两个不相等的键;
- obj和obj是两个想等的键;
如何和数组互相转换?
和set一样
const map = new Map([
['a', 1],
['b', 3],
['c', 4]
]);
const result = [...map];
console.log(result); // [['a', 1],['b', 3],['c', 4]]
遍历
- for-of,每次迭代得到的是一个长度为2的数组
- forEach,通过回调函数遍历
- 参数1:每一项的值
- 参数2:每一项的键
- 参数3:map本身