Map

Map 是一个带键的数据项的集合,就像一个 Object 一样。 但是它们最大的差别是 Map 允许任何类型的键(key)。
它的方法和属性如下:

  • new Map() —— 创建 map。
  • map.set(key, value) —— 根据键存储值。
  • map.get(key) —— 根据键来返回值,如果 map 中不存在对应的 key,则返回 undefined。
  • map.has(key) —— 如果 key 存在则返回 true,否则返回 false。
  • map.delete(key) —— 删除指定键的值。
  • map.clear() —— 清空 map。
  • map.size —— 返回当前元素个数。

    Map 迭代

    如果要在 map 里使用循环,可以使用以下三个方法:

  • map.keys() —— 遍历并返回所有的键(returns an iterable for keys),

  • map.values() —— 遍历并返回所有的值(returns an iterable for values),
  • map.entries() —— 遍历并返回所有的实体(returns an iterable for entries)[key, value],for..of 在默认情况下使用的就是这个。

例如:

  1. let map = new Map([['a',1],['b',2],['c',3]]);
  2. console.log(map)
  3. 1console.log(map.get('a')) //1
  4. for(let [key,value] of map.entries()) {
  5. 1 console.log(key,value); // 遍历返回所有成员的遍历器
  6. }
  7. // 1 a 1 , b 2 ,c 3
  8. for(let keys of map.keys()) {
  9. // console.log(keys) // a,b,c 返回键名
  10. }
  11. for (let value of map.values()) {
  12. console.log(value); // 1,2,3 返回键值
  13. }

Map 与其他数据类型的互相转换

1.map 转化为数组

let map = new Map();
    map.set('a',1);
    map.set('b',1);
    map.set('c',1);
    console.log(map) //Map(3) {'a' => 1, 'b' => 1, 'c' => 1}
    let mapAry = [...map];
    console.log(mapAry) // [Array(2), Array(2), Array(2)]

2.数组转化为map

    let ary = ['a',2];
    let map = new Map([['a',1],['b',2]]);
    console.log(map) // Map(2) {'a' => 1, 'b' => 2}

3.map转化为对象

//    如果map所有键都是字符串则可以转化为对象
    function  strMapToObj(strMap){
        let obj = Object.create(null);
        for(let [key,value] of strMap) {
            obj[key] = value;
        }
        return obj;
    }
    const map = new Map([['a',1],['b',2]]);
    console.log(strMapToObj(map)) // {a:1,b:2}

4.对象转化为map

 let obj = {
        a:1,
        b:2,
        c:3
    }
    function  objToMap(obj) {
        let map = new Map();
        for(let key of Object.entries(obj)){
            map.set(...key)
        }
        return map;
    }

    console.log(objToMap(obj)) // {'a' => 1, 'b' => 2, 'c' => 3}