zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    轮廓 | outline (Basic User Interface)
    转换 | CSS Transitions (Animations & Transitions)
    越线 | line-break (Text)
    贴士和技巧 | CSS Animations: Tips (Animations & Transitions)
    负 | @counter-style.negative (Counter Styles)
    调整 | resize (Basic User Interface)
    再见乱码:5分钟读懂MySQL字符集设置
    git
    Python 内存&函数调用关系图
    Python 笔记
  • 原文地址:https://www.cnblogs.com/insignificant-malt/p/8550575.html
Copyright © 2011-2022 走看看