Es6 set

47 阅读1分钟

set介绍

Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

const set = new Set([1, 2, 3, 4, 4])

console.log(set);   // {1, 2, 3,4}

Set 实例的属性和方法

  • Set.prototype.size:返回Set实例的成员总数。
    const set = new Set([1, 2, 3, 4, 4])
    set.size   //  4
  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。
    set.add(1)    //  {1, 2, 3, 4, 8}
  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
     set.delete(8)    // true
     console.log(set);   // {1, 2, 3,4}
  • Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
     set.has(3)   // true
     set.has(8)   // false
  • Set.prototype.clear():清除所有成员,没有返回值。
     Set.clear()
     console.log(set)    //   Set(0) {}

使用场景

可以通过set构造函数 + ...扩展运算符实现数组去重

const set = new Set([1, 2, 3, 4, 4])
[...set]    //  [1,2,3,4]

也可以实现字符串去重

[...new Set('ababbc')].join('')    // 'abc'

Array.from方法可以将 Set 结构转为数组。

const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items);  //    [1, 2, 3, 4, 5]
取并集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union = new Set([...a, ...b]);  // {1, 2, 3, 4}

取交集 a和b都有的值
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
b没有a的哪一项
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}