ES6-Set、WeekSet数据结构

Set、WeakSet数据结构

Set数据结构

  1. ES6提供了新的数据结构Set,类似于数组,但是成员的值都是唯一的,没有重复的值

  2. Set本身是一个构造函数,用来生成Set数据结构

    • const s = new set();
  3. set函数可以接受一个数组作为参数,用来初始化

  4. size属性:Set数据结构中的一个属性,用于计算当前数据结构中包含了多少值

    <script>
      const s = new Set();
      console.log(s.size); // 0
    
      const e = new Set([1, 2, 4, 5]);
      console.log(e.size); // 4
    
      const t = new Set([1, 2, 2, 5]);
      console.log(t.size); // 3 当数组内有重复的值时,重复的数据会被过滤
    </script>
    
  5. 案例:利用set数据结构做数组去重

    <script>
        const s = new Set(['a', 'a', 'b', 'b', 'c']);
        var arr = [...s];
        console.log(arr); // ["a", "b", "c"]
    </script>
    

实例方法

  1. add(value):添加某个值,返回Set结构本身

    const set = new Set();
    
    set.add(1);
    set.add(2);
    // 下面两行添加的是不同的空对象,两个对象的引用地址不同,因此不算重复对象
    set.add({});
    set.add({});
    
    // 下面的两行add,都是添加的同一个对象,因此只会成功add一次
    const obj = { a: '1' }
    set.add(obj);
    set.add(obj);
    
    console.log(set); // Set(4) { 1, 2, {}, {}, value: {a: '1'} }
    
  2. delete(value):删除某个值,返回一个布尔值,表示删除是否成功

  3. has(value):返回一个布尔值,表示该值是否为Set的成员

  4. clear():清除所有成员,没有返回值

    <script>
      const set = new Set([1, 'a', 'b']);
    
      // add(value)
      set.add(3).add('c').add('hello');
      console.log(set); // Set(6) {1, "a", "b", 3, "c", "hello"}
      // delete(value)
      var flag1 = set.delete('a');
      console.log(flag1); // true
      console.log(set); // Set(5) {1, "b", 3, "c", "hello"}
      // has(value)
      var flag2 = set.has('hello');
      console.log(flag2); // true
      // clear()
      set.clear()
      console.log(set); // Set(0) {}
    </script>
    

遍历方式

<script>
  const s = new Set(['a', 1, 'b']);
  s.forEach((value) => {
    console.log(value);
  })
</script>

WeakSet数据结构

  1. WeakSet:和Set数据结构类似,也是内部元素不能重复的数据结构

  2. Set数据结构的区别:

    1. WeakSet数据结构内部只能是对象,不能是其他类型的(Set可以存放任何类型的值)

      const weakSet = new WeakSet();
      
      weakSet.add(10); // TypeError:Invalid value used-in weak set
      
    2. WeakSet对对象是弱引用,不会阻止垃圾回收(Set对对象是强引用)

    3. WeakSet 不能被遍历,没有 size 属性,也没有 clear 方法(Set可以被遍历,有size属性,并且有clear方法)

实例方法

  1. add(value):在WeakSet对象中添加一个新元素
  2. delete(value):从WeakSet对象中移除一个元素
  3. has(value):返回一个布尔值,表示给定的值是否在WeakSet对象中

你可能感兴趣的:(es6,数据结构,javascript)