更多的集合类型-map集合

158 阅读2分钟

概述

map集合专门用于存储多个键值对数据。

键值对(key value pair)数据集合的特点:键不可重复

在map出现之前,我们使用的是对象的方式来存储键值对,键是属性名,值是属性值。

使用对象存储数据有以下问题:

  1. 键名只能是字符串或符号;
  2. 获取数据的数量不方便;
  3. 键名容易跟原型链上的名称冲突

如何创建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

分析:

  1. {} 和 {} 是两个不相等的键;
  2. 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本身