es6的 set 学习总结

 ================set 集合=======================
        一直以来,JS只能使用数组和对象来保持多个数据,缺乏像其他语言那样拥有丰富的结合类型
        。因此,ES6 新增了两种结合类型(set 和 map), 用于不同场景发挥作用。

        1. set 用于存放不能重复的数据
        如何创建一个set:const sets = new Set(); // 创建一个没有任何内容的set集合
             const contentSet = new Set(iterable); // 创建一个具有初始化内容的set集合,
            内容来自迭代对象每一次迭代的结果,并且自动去重

        2. 如何对set 集合进行后续操作
         add(数据): 添加一个数据到set集合末尾,如果数据已经存在,不存在任何操作
           set 使用Object.js 的方式来判断两个数据是否相同, 但是set任务 +0-0 是相等的
         has(数据): 判断set中是否存在两个相等的数据
         delete(数据): 删除匹配的数据,返回是否删除成功
         clear(): 清空整个set集合


         3. 如何和数组相互转化
         // 数组使用set来去重
         const s = new Set([1,2,3,4,5,6,7,8]);
         const arr = [...s];

         // 字符串去重
         const str = "fsjfsjsjfifas";
         const s = [...new Set(str)].join("");

         4. 如何遍历
          1. 由于set是迭代对象的属性, 可以使用 for of 来遍历
          2. 使用set内部提供的实例方法, forEach()
          const s = new Set([1,2,3,4,5,6,7,8]);
          s.forEach((item, index, obj) => {
              item: // set中的每一项
              index: // set 不存在下标,为了保持forEach()的一致, 这个参数和第一个参数一样
              obj: set 对象

          })
        注意: set中的index 不是下标

        求两个数组的交集,并集, 差级:
        例如:
            const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
            const arr2 = [1, 3, 4, 5, 6, 3, 6, 7, 9];
            // 求并集
            const s = [...new Set(arr1.concat(arr2))];
            const s1 = [...new Set([...arr1, ...arr2])];
            console.log(s, s1, '并集');

            // 求交集
            const s3 = [...new Set(arr1)].filter(item => {
                return new Set(arr2).has(item);
            })
            const s4 = [...new Set(arr1)].filter(item => arr2.indexOf(item) !== -1)
            console.log(s3, s4, '交集');

            // 求差值
            const s5 = [...new Set([...arr1, ...arr2])].filter(item => (arr1.indexOf(item) !== -1 && arr2.indexOf(item) === -1) || (arr2.indexOf(item) !== -1 && arr1.indexOf(item) === -1));
            const s6 = [...new Set([...arr1, ...arr2])].filter(item => s3.indexOf(item) !== -1);
            console.log(s5, s6, "差值")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章