es6-Set、Map

Set

  • 定义
    这是一种无重复值的有序列表(如果添加了重复项相当于添加无效,对象除外,因为他们不会被转为字符串类型相同的对象在其中就是两个object,也没有类型转换)。Set允许对它包含的数据进行快速访问,从而增加了一个追踪离散值的更有效方式。
  • 基本操作与方法
     let set = new Set(); // 创建set对象
     set.add(5);   // 添加元素,也可以添加对象
     set.add("5"); // 没有类型转换所以可以添加进去
     console.log(set.size);  // 
     console.log(set.has(5))  // 返回true
     set.delete(5); // 删除指定元素
     set.clear();   //删除所有元素
     // 也可以用数组初始化set对象,同样的会自动忽略相同值
     let set1 = new Set([1, 2, 3, 4, 5, 5, 5, 5]);  
    
  • forEach()
    循环遍历set中元素
     let set = new Set([1, 2, 3]);
     set.forEach(function(vaule, key, ownSet){
         console.log(vaule);    
     });// 第一、二个参数为set对象首元素,第三个参数为set自身
    
    forEach中回调函数要使用this值时在整个的第二个参数加上this,或者使用箭头函数。
     set.forEach((value) => this.output(value));
    
  • set对象转换为数组(剩余运算符实现)
     let set = new Set([1, 2, 3]);
     let arr = [...set];
    
    那么以这种方式我们多了一种数组去重的办法:
     function deWeight(arr) {
         return [...(new Set(arr))];
     } // 将数组对象转化为set对象存储在转为数组
     let arr = [1, 1, 1, 1, 1, 2];
     console.log(deWeight(arr));
    
  • weakSet
    是set对象的一个弱引用,set方法存入的对象当对象指定在外部指定去除时set对象内部任然会有,weakSet更加像是一个指向性的对象外部去除内部也不会存在
    几点区别
    • weakSet各种方法只能传入对象
    • 没有forEach方法

Map

  • 定义
    Map更像是一种数据关联,为可以为一个对象设置一个键值一起存储到Map对象,然后通过键值去访问到数据,json中键值只能是字符型,但Map键值都可以。
  • 基本操作方法
    存入为set、访问为get,都是通过操作键值(键值可以是对象),其他与set对象相同。
     // 定义添加
     let map = new Map();
     map.set(键值,键值对应值);
     // 直接添加
     let map = new Map([["name", "Nicholas"], ["age", 25]]);
    
  • Map的forEach方法
    用法与set对象一致,相对于理解上Map的该方法更能说通三个参数为键值、键值对应值、对象本身。
  • weakMap
    与前面所介绍weakSet的各项特点一致。简化了构建私有化对象的问题,这边是书本上看到的一个私有化案例还不是很懂意思,还需琢磨一下。
     let Person = (function() {
         let privateData = new WeakMap();
         function Person(name) {
             privateData.set(this, { name: name });
         }
         Person.prototype.getName = function() {
             return privateData.get(this).name;
         };
         return Person;
         }());
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章