Set
Set是值的集合。可变,所以你可以添加和删除其中的值。
一个Set不会含有相同的值。如果试图添加一个已经存在的值到Set中,什么都不会发生。
var girls = new Set(["june","dora","amy"]);
girls.size; //3
girls.add("dora");
girls.size; //3
Set可以包含任意类型的js值。
Set的值有组织的,所以某些操作会非常的快。
// 查看某值是否存在
> arrayOfGirls.indexOf("june") !== -1 // slow
true
> setOfGirls.has("june") // fast
true
Set没有索引。
arrayOfGirls[1] //dora
setOfGirls[1] //undefine,set不支持索引
set 操作
new Set创建一个新的空set。new Set(iterable)创建一个新的set,用任何可迭代的数据值填充其中。set.size获取set的值的个数。set.has(value)如果set包含给定的值,返回`true。set.add(value)给set添加一个值,如果这个值已经存在于set中,啥也不会发生。set.delete(value)删除set中的某个值,如果这个值不存在于set中,啥也不会发生。.add()和.delete()都会返回set对象自己,所以你可以链式调用;set[Symbol.iterator]返回一个新的迭代器,迭代set中的值。这个方法使得set可迭代,意味着你可以使用for (v of set){...}等等。set.forEach(f)与数组的forEach()类似。set.clear()移除set中的所有值。set.keys(),set.values(),set.entries()返回不同的迭代器,为了与Map兼容。
new Set(iterable) 非常强大,操作整个数据结构。
把数组转为set,只需要一行代码就可以去重。
传一个generator进去,会一直运行generator到结束,把所有yield的值放入set中。
这个构造函数还能让人很容易就复制一个已存在的Set。