1. Set
基本用法
ES6新增了Set,它类似于数组,但是成员的值不会重复,都是唯一的。
const s = new Set();
[1, 2, 3, 4, 3, 2, 1].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 1, 2, 3, 4
上面代码循环向Set结构加入成员,结果表明不会添加重复的值。
Set结构可以接受一个数组进行初始化。
const s = new Set([1, 2, 3]);
Set的操作
Set
的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)。下面先介绍四个操作方法。
- add(value)
:添加某个值,返回 Set 结构本身。
- delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。
- has(value)
:返回一个布尔值,表示该值是否为Set的成员。
- clear()
:清除所有成员,没有返回值。
s.add(1).add(2);
s.has(1) // true
s.has(2) // true
s.delete(2);
s.has(2) // false
Set的遍历
有四个遍历方法,用于遍历成员。
keys()
:返回键名的遍历器values()
:返回键值的遍历器entries()
:返回键值对的遍历器forEach()
:使用回调函数遍历每个成员
由于Set
结构类似于数组,没有键名,只有键值,所以实际上keys()
和values()
的行为完全一致。
2. Map
含义和基本用法
JavaScript的对象本质上是键值对的集合(Hash结构),但键名只能用字符串。为解决这个问题,ES6提供了Map
结构,它类似于对象,但各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串-值”的对应,Map结构提供了“值-值”的对应,如果你需要“键值对”的数据结构,Map比Object更合适。
const m = new Map();
const o = {p: 'Hello World'};
m.set(o, 'content')
m.get(o) // "content"
m.has(o) // true
m.delete(o) // true
m.has(o) // false
上面代码使用Map
的set
方法,将对象o当作m的一个键。
遍历方法
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回所有成员的遍历器。
- forEach():遍历 Map 的所有成员。
注:本文原始内容来自 ES6标准入门,有修改。