原文:https://www.jianshu.com/p/e35a4916377c
现行的编程语言都会提供几种类型的数据集合支持,在ES6 之前,JavaScript 仅提供了对数组的支持。在以数组和对象为编程主力的JavaScript 语言,ES6 中引入了4种新的数据结构,分别是:集合(Set)、若集合(WeakSet)、映射(Map)、若映射(WeakMap)。下面,我们看一下它们各自的表现方式吧。 一、Set 1、概述 Set 对象是值的集合,可以按照插入的顺序迭代它的元素。Set 中的元素只会出现一次,即 Set 中的元素是唯一的。 使用方式: new Set([ iterable ]); 参数 iterable :是一个可迭代的对象,它的所有元素将被添加到新的 Set 中。 由于 Set 中的值总是唯一的,所以需要判断两个值是否相等。在对象的扩展章节中,我们讲到可以通过Object.is() 来判断是否严格相等,在 Set 中,-0 和 +0 是两个不同的值,NaN 和 undefined 是可以被存储在 Set 中的,因为 NaN 在ES6中是严格相等的。
new Set([NaN, NaN, 2, 3, 5, 5]); // Set(4) {NaN, 2, 3, 5}
2、属性 length 属性:
Set.length; // 0
Set.prototype:表示 Set 构造器的原型,允许想所有 Set 对象添加新的属性。 Set.prototype.constructor:返回实例的构造函数,默认是 Set。 Set.prototype.size:返回 Set 对象的值的个数。
var mySet1 = new Set([NaN, NaN, 2, 3, 5, 5]); mySet1.size; // 4
3、方法 (1)、在 Set 对象尾部添加一个元素:Set.prototype.add(value)
var mySet2 = new Set([NaN, NaN, 2, 3, 5, 5]); mySet2.add(1); mySet2.add(1).add("undefined"); console.log(mySet2); // Set(6) {NaN, 2, 3, 5, 1,"undefined" }
(2)、清楚 Set 中所有的元素:Set.prototype.clear() (3)、判断值是否存在于 Set 中:Set.prototype.has(value);
var mySet3 = new Set(); mySet3.add("yuan"); mySet3.add("monkey"); mySet3.has("yuan"); // true mySet3.clear(); mySet3.has("yuan"); // false
(4)、删除 Set 中的某个值: Set.prototype.delete(value);
var mySet = new Set(); mySet.add("foo"); mySet.delete("bar"); // 返回 false,不包含 "bar" 这个元素 mySet.delete("foo"); // 返回 true,删除成功 mySet.has("foo"); // 返回 false,"bar" 已经成功删除
(5)遍历 Set 对象中的元素:forEach()、keys()、values()、entries() forEach:
function logSetElements(value1, value2, set) { console.log("s[" + value1 + "] = " + value2); } new Set(["foo