# Set 和 Map 数据结构

  • Set ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set 本身是一个构造函数,用来生成 Set 数据结构。
<script>
	var s = new Set();
	[2, 3, 5, 4, 5, 2, 2].forEach((x) => s.push(x));
	console.log(s);
	// [2 3 5 4]
</script>

上面代码通过 add 方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。

  • size 属性 Set.prototype.size:返回 Set 实例的成员总数。
  • size 方法 Set.prototype.add(value):添加某个值,返回 Set 结构本身。 Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。 // 删除成功 返回 true 否则 false Set.prototype.has(value):返回一个布尔值,表示该值是否为 Set 的成员。 Set.prototype.clear():清除
<script>
	var s = new Set([1, 23, 4]);
	s.add(5); // Set(4) {1, 23, 4, 5}
	console.log(s.size); // 4
	s.delete(1); //
	console.log(s); // Set(3) {23, 4, 5}
	var sets = s.has(23); //
	console.log(sets); // true
	s.clear();
	console.log(s); //Set(0)
</script>
  • Set 实现数组去重
<script>
	const items = new Set([1, 2, 3, 4, 5]);
	const array = Array.from(items);
</script>
  • Map ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
<script>
	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
</script>

Map 实例的属性和操作方法

  • size 属性 size 属性返回 Map 结构的成员总数。
  • Map.prototype.set(key, value) set 方法设置键名 key 对应的键值为 value,然后返回整个 Map 结构。如果 key 已经有值,则键值会被更新,否则就新生成该键。
<script>
	var map = new Map();
	map.set("aa", "100");
	console.log(map); // Map(1) {"aa" => "100"}
</script>
  • Map.prototype.get(key) get 方法读取 key 对应的键值,如果找不到 key,返回 undefined。
<script>
	var map = new Map();
	map.set("aa", "100");
	console.log(map.get("aa")); // 100
</script>
  • Map.prototype.has(key) has 方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
<script>
	var map = new Map();
	map.set("aa", "100");
	console.log(map.has("aa")); // true
</script>
  • Map.prototype.delete(key) delete 方法删除某个键,返回 true。如果删除失败,返回 false。
<script>
	var map = new Map();
	map.set("aa", "100");
	console.log(map.delete("aa")); // true
</script>
  • Map.prototype.clear() clear 方法清除所有成员,没有返回值。
<script>
	var map = new Map();
	map.set("aa", "100");
	map.clear();
	console.log(map); // Map(0) {}
</script>
上次更新: 10/29/2019, 6:04:16 PM