Skip to content

ES6学习:Map 和 Set

ES6引入了两个非常受欢迎的数据结构:maps和sets。maps跟对象类似,可以用键key来map值(values),sets则类似于数组,只不过不允许出现重复值。

maps

先说下现有object存在的一些弊端:

  • 对象原型中可能存在并不需要的映射
  • 弄清楚对象中有多少映射并不简单
  • 因为键必须是一个字符串或者符号,不能将对象映射到值
  • 对象不能保证自身属性的顺序

而Map对象解决了以上问题,它是将键和值映射起来的(即时键是一个字符串)绝佳选择。例如:当想把user对象映射到role时:

js
const u1 = {name: 'fri'}
const u2 = {name: 'fridolph'}
const u3 = {name: 'fys'}
const u4 = {name: 'yinlinshengxiao'}

从创建一个Map对象开始:

const userRoles = new Map();

可以使用map中的set方法把user赋给role:

userRoles.set(u1, 'User'); userRoles.set(u2, 'User'); userRoles.set(u3, 'Admin');

可链式调用:

userRoles .set(u1, 'User') .set(u2, 'User') .set(u3, 'Admin')

主要API:

Map.set(key, value) 设置对应key的值 Map.get(key) 拿到key上对应的value Map.size 返回map中元素个数 Map.delete(key) 删除其中一项 Map.clear() 清空Map

使用keys()方法可以拿到map中所有的键,values()可以拿到所有的值,entries()则可以以数组的方式获取键值对,元素的第一个元素为键,第二个元素为值,所有这些方法都返回一个可迭代对象。从而能用for-of循环来迭代

Weak maps

WeakMap跟Map在本质上是相同的,除了以下几点:

  • key必须是对象
  • WeakMap中的key可以被垃圾回收
  • WeakMap不能迭代或者清空

set

Set是一个不允许重复数据的集合(跟数学中集合的概念一样)

创建Set实例

const roles = new Set();

相关API

Set.add(item); Set.size Set.delete

打破对象习惯

在以往需要映射时,对象往往成为首选。 现在开始,我们应该把ES6的这两种数据结构使用起来

共 20 个模块,1301 篇 Markdown 文档。