Map数据结构

118 阅读2分钟

它类似对象,也是键值对的集合,但它的的取值范围不限于字符串,可以是其他类型的值,包括对象,如下:

image.png

上面的代码,使用了Map结构的set方法,把o对象当成m的一个键,然后再用get方法读取这个键,接着用delete方法删除这个键。

Map也可以接受数组为参数。

image.png 也可以接受Set和Map作为参数。

image.png 如果对同一键多次赋值,后面的值将会覆盖前面的值。

image.png 读取一个未知键,则会返回undefined。

image.png 只有对同一对象的引用,Map结构才会视为同一个键。

image.png 上面的代码,看似是同一个键,其实是不同的键,因为这俩个数组实例的内存地址是不一样的,所以get才会返回undefined。

同理,同样的值的俩个实例,Map看做不同的键。 image.png Map 结构的实例有以下属性和操作方法。

(1)size,返回Map结构成员的总数。

(2)set(key,value)set方法设置键名key对应的键值value,然后返回整个Map结构,如果key已有值,则覆盖其值,没有则新生成该键。

(3)get(key),读取Map结构的key值,然如果没有则返回undefined。

(4)has(key),返回一个布尔值,表示Map结构是否存在key键。

(5)delete(key),返回一个布尔值,删除Map结构中的key键。

(6)clear()清除所有成员,没有返回值。

image.png

遍历方法

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

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

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

image.png

image.png Map 结构转为数组结构,比较快速的方法是使用扩展运算符(...)。

image.png