在ES5中,我们使用的是对象的方式来存储键值对,键是属性名,值是属性值,这种方法有以下问题
1)键名只能是字符串
2)获取数据的数量不方便
3)键名容易跟原型上的名称冲突
ES6中新增了map集合专门用于存储多个键值对数据。 键值对(key value pair)数据集合的特点:键不可重复。
1)new Map() —— 创建一个空的map
2)new Map(iterable) —— 创建一个具有初始内容的map,初始内容来自于可迭代对象每一次迭代的结果,但是,它要求每一次迭代的结果必须是一个长度为2的数组,数组第一项表示键,数组的第二项表示值
【例1】
const mp1 = new Map();
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
console.log('mp1:', mp1);
console.log('mp2:', mp2);
【结果】
1)size:只读属性,获取当前map中键的数量
【例2】
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
console.log('mp2的size:',mp2.size);
【结果】
2)set(键,值):设置一个键值对,键和值可以是任何类型:如果键不存在,则添加一项;如果键已存在,则修改它的值;比较键的方式和set相同
【例3】
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
console.log('原始mp2:',mp2)
const obj = {}
mp2.set(obj, 13);
console.log('添加obj后的mp2:',mp2);
mp2.set("a",4);
console.log('修改a的值后的mp2:',mp2);
【结果】
3)get(键):根据一个键得到对应的值
4)has(键):判断某个键是否存在
5)delete(键):删除指定的键
6)clear():清空map
【例4】
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
//map => array
const arr = [...mp2];
console.log(arr);
//array => map
const mp3 = new Map(arr);
console.log(mp3);
【结果】
1)for-of:每次迭代得到的是一个长度为2的数组
【例5】
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
for (const iterator of mp2) {
console.log(iterator);
}
【结果】
2)forEach:通过回调函数遍历
参数1:每一项的值
参数2:每一项的键
参数3:map本身
【例6】
const mp2 = new Map([["a", 3], ["b", 2], ["c", 6]]);
mp2.forEach((item, index, mp) => {
console.log(item, index, mp)
});
【结果】