携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天juejin.cn/post/712312…
Map
1、什么是Map?
答:它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
创建方式: let obj=new Map([[键名:值],[键名:值]...])
说明:页面可以直接在创建时就添加参数,参数是个二维数组,里面的数组包裹的是每个键值对。 往Map里添加键值对,用set方法
如果键名是数组,就把数组本身作为键名,即Array(length)
读取Map里的值,用get方法;
语法:变量名=map对象.get(键名)
属性
- size 查看Map结构里有几个键值对
- 添加键值对可以进行链式操作,因为set方法返回值就是完整的Set结构
- Map.prototype.get(key)
说明:get方法读取key对应的键值,如果找不到key,返回undefined。
- Map.prototype.has(key)
has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
- Map.prototype.delete(key)
delete方法删除某个键,返回true。如果删除失败,返回false。
- 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
它的键名只能是对象,它的简明所指向的对象,不计入垃圾回收机制。