es6的map解析

1,671 阅读2分钟

什么是map?

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

const m = new Map();
const x = {p: 'Hello World'};

m.set(x, 'content')
m.get(x) // "content"

m.has(x) // true
m.delete(x) // true
m.has(x) // false

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

map的属性和方法

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

(2)Map.prototype.set(key, value) set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

(3)Map.prototype.get(key)

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

(4)Map.prototype.has(key)

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

(5)Map.prototype.delete(key)

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

(6)Map.prototype.clear()

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

遍历方法

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

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

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

(1)Map 转为数组

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

(2)数组 转为 Map

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

(3)Map 转为对象

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

(4)对象转为 Map

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

(5)Map 转为 JSON

Map 转为 JSON 要区分两种情况。一种情况是,Map 的键名都是字符串,这时可以选择转为对象 JSON。

(6)JSON 转为 Map

JSON 转为 Map,正常情况下,所有键名都是字符串。