ES6的Map结构创建/属性/方法

123 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天juejin.cn/post/712312…

Map

1、什么是Map?

答:它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。

创建方式: let obj=new Map([[键名:值],[键名:值]...])

说明:页面可以直接在创建时就添加参数,参数是个二维数组,里面的数组包裹的是每个键值对。 往Map里添加键值对,用set方法

如果键名是数组,就把数组本身作为键名,即Array(length)

读取Map里的值,用get方法;

语法:变量名=map对象.get(键名)

属性

  1. size 查看Map结构里有几个键值对
  2. 添加键值对可以进行链式操作,因为set方法返回值就是完整的Set结构
  3. Map.prototype.get(key)

说明:get方法读取key对应的键值,如果找不到key,返回undefined

  1. Map.prototype.has(key)

has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

  1. Map.prototype.delete(key)

delete方法删除某个键,返回true。如果删除失败,返回false

  1. Map.prototype.clear()

clear方法清除所有成员,没有返回值。

注意:这些方法是放在Map原型上的,再用的时候省略prototype

遍历Map的方法

Map 结构原生提供三个遍历器生成函数和一个遍历方法。

  • Map.prototype.keys():返回键名的遍历器。
  • Map.prototype.values():返回键值的遍历器。
  • Map.prototype.entries():返回所有成员的遍历器。
  • Map.prototype.forEach(function(){}):遍历 Map 的所有成员。

需要特别注意的是,Map 的遍历顺序就是插入顺序。

用for...of遍历Map生成的对象,没用keys(),values(),entries()方法,循环里的变量就是键值对,和Set结构不同,Set里是values值。

与其他数据结构的互相转换

1、Map转数组

前面已经提过,Map 转为数组最方便的方法,就是使用扩展运算符(...)。

2、 数组转Map

将数组传入 Map 构造函数,就可以转为 Map。

2、Map转对象

如果所有 Map 的键都是字符串,它可以无损地转为对象。

3、对象转Map

对象转为 Map 可以通过Object.entries()

WeakMap

它的键名只能是对象,它的简明所指向的对象,不计入垃圾回收机制。