ES6学习笔记之Set

252 阅读1分钟

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

原文: hacks.mozilla.org/2015/06/es6…