JavaScript 中的数据结构--Map

896 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

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()方法进行迭代映射