Set()--Es6新的数据结构

新的数据结构Set

set实例的属性和方法
1)Set结构的实例有以下属性
  Set.prototype.constructor: 构造函数,默认就是Set函数
  Set.prototype.size:返回Set实例的成员总数
2)set实例的方法分为两大类:操作方法(用于操作数据)和遍历方法(用于遍历成员)
操作方法(用于操作数据)
  -add(value): 添加某个值,返回Set结构本身。
  -delete(value):删除某个值,返回一个布尔值,标书删除是否成功
  -has(value):返回一个布尔值,表示该值是否为set的成员
  -clear():清除所有成员,没有返回值

    let s2 = new Set();
    s2.add(1).add(2).add(2)
    console.log(s2.size);

    console.log(s2.has(1));
    console.log(s2.has(2));
    console.log(s2.has(3));

    s2.delete(2);
    console.log(s2.has(2));

遍历方法(用于遍历成员)
  -keys():返回键名的遍历器;
  -values():返回键值得遍历器;
  -entries():返回键值对的遍历器:
  -forEach():使用回调函数遍历每个成员;
  注:需要特别指出的是,Set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用 Set 保存一个回调函数列表,调用时就能保证按照添加顺序调用。
  由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
    let set5 = new Set(['red', 'green', 'blue']);
    for(let item of set5.keys()) {
      console.log(item);
    }
    for(let item of set5.values()) {
     console.log(item);
    }
    for(let [key, value] of set5.entries()) {
      console.log([key, value]);
    }
  -for...of....
    for(let x of set5) {
      console.log(x);
    }
  -forEach()
    set5.forEach((value, key) => console.log(key + ':' + value));

遍历的应用
  let set6 = new Set(['red', 'green', 'blue']);
  let arr = [...set6];
  console.log(arr);

  let arr2 = [3, 5, 2, 2, 5, 5];
  let unique = [...new Set(arr2)];
  console.log(unique);

  let set7 = new Set([1, 2, 3]);
  set7 = new Set([...set7].map(x => x * 2));
  console.log(set7)

  let a1 = new Set([1, 2, 3]);
  let b1 = new Set([4, 3, 2]);
  /*并集*/
    let union = new Set([...a, ...b]);
  /*交集*/
    let intersect = new Set([...a].filter(x => b.has(x)));
  /*差集*/
    let difference = new Set([...a].filter(x => !b.has(x)));

  去除数组中重复成员的方法
  function dedepe(array) {
    return Array.from(new Set(array));
  }
  console.log(dedepe([1, 1, 2, 3]));

3)注意点:Set结构不会添加重复的值

  Set加入值得时候,不会发生类型的转换,5 和 '5'是不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
  两个NaN是相等的 只能加入一个
  let set3 = new Set();
  let a = NaN;
  let b = NaN;
  set3.add(a);
  set3.add(b);
  console.log(set3);

  两个对象是不相等的
  let set4 = new Set();
  set4.add({});
  console.log(set4.size);

  set4.add({});
  console.log(set4.size);

原文地址:https://www.cnblogs.com/insignificant-malt/p/8550575.html