小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Map (映射)类
Map对象 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
包括 null/ undefined/ NaN, 对象和数组 等引用类型都可作为 键和值!
可以使用 new Map() 构造函数创建一个 Map 映射对象
let emptyMap = new Map() // 创建一个新的 空映射
// 下面初始化创建一个新映射, 表示字符串 'one' 到 数字1 的映射
let firstMap = new Map([
["one", 1],
["two", 1]
])
Map 对象也可简单理解看成 类似数组. 我们知道数组对应的索引下标是: 从 0 开始, 且连续的整数. 而 Map 对象不限于用连续的整数作为键, 而且可以使用任何值作为'索引'; 既然与数组类似, Map 的映射速度也很快, 无论映射有多大, 在查询与某个键关联的值都很快(相对数组的索引查询还是略慢一些吧. 我想毕竟人家数组的索引简单就是整数且连续吧, 不知道可不可以这么比较哦?)
let copyMap = new Map(n) // 创建一个新映射, 这个映射和 `n` 有着相同的键和值, 这里作用为 `复制`
let obj = {x: 1, y: 2} // 拥有两个属性的对象
let mapFromObj = new Map(Object.entries(obj)) // ==> new Map([["x", 1], ["y", 2]])
Map 的相关方法
.size===> 类似于数组的length.set()===> 设置键值对.get()===> 通过键名获取映射对应的值.has()===> 判断是否含有 查询对应的键值. 有返回 true; 没有则返回 false.delete()===> 删除.clear()===> 删除 清空所有的键值对
查询访问和设置 Map 对象的值
let newmap = new Map()
newmap.size // 0, 这是一个空映射, size 为0
newmap.set("one", 1) // set方法 设置映射键 "one" 和 值 1
newmap.set("two", 2) // 同样set方法 添加键 "two" 和 值 2
newmap.size // 2 经过上面的设置, 此时 该映射有两个键 size 为 2
newmap.get("two") // 2 // get 方法, 通过键名 获取值
newmap.get("one") // 1
newmap.get("three") // undefined 这是因为没有键名 three 则返回 undefined
newmap.has("one") // true 包含 "one" 这个键值
newmap.has("three") // false 不包含 "three" 这个键, 返回 false
newmap.delete("one") // 删除 "one" 这个键值对
newmap.clear() // 清空所有键值对
而且 这里的 .set() 方法类似管道, 也可以进行连续调用
newmap.set("three", 3).set("four", 4)
其他迭代方法
.keys()===> 迭代 键 key.values()===> 只迭代映射的值.entries()===> 迭代 键和值, 类似于...forEach===> Map对象也可以使用 forEach()方法进行迭代映射