Set对象

戏子无情 提交于 2020-04-06 06:00:27

Set对象

在javaScript中存在两类聚合数据: 数组和对象。 ES6又新增两类聚合数据:Set对象和Map对象 Set对象,类似数组,但却是去重后的有序聚合数据。成员值都是唯一的(数据类型不同)

// let s1 = new Set([1, 2, 3, 2, 1, '2', NaN, +'a', 0, 0/-1]);
// console.log(s1)
// // 转化数组
// console.log([...s1])
// console.log(Array.from(s1));

Set是构造函数,参数是数组,类数组(或者实现了迭代器接口的数据) 我们可以用...语法对set对象转成数组。

set 相关方法简表: 方法 | 说明 :-:|-- Set.prototype.constructor | 构造函数,默认就是 Set 函数。
Set.prototype.size | 返回 Set 实例的成员总数。 add (value) | 添加某个值,返回 Set 结构本身。 delete(value ) | 删除某个值,返回一个布尔值,表示删除是否成功。 has (value) | 返回一个布尔值,表示参数是否为 Set 的成员。 clear() | 清除所有成员,没有返回值。 keys () | 返回键名的遍历器。 values () | 返回键值的遍历器。 entries () | 返回键值对的遍历器。 forEach() | 通过回调函数遍历每个成员。

注:由于 Set 对象没有键名只有键值,因此 keysvalues 方法的返回值是一样的。 set基本使用

        // 创建set对象
        let s1 = new Set();
        //添加成员
        console.log(s1.add(1))// Set(1){1} //返回的是set对象 
        //可以使用链式调用
        s1.add(1).add(2).add(3).add(2).add(1)
        console.log(s1)//{1,2,3}
        console.log(s1.size)//3
        //判断2是否存在
        console.log(s1.has(2))//true
        //删除成员
        console.log(s1.delete(2))//true
        console.log(s1.delete(2))//false 2不存在 所以删除失败
        //清空数据
        console.log(s1.clear())//undefined
        console.log(s1)//{}

set迭代器方法

  // ======= set迭代器方法
        let s1 = new Set(["blue","red","green"])
        //获取键名
        console.log(s1.keys())//SetIterator {"blue", "red", "green"}
        //获取键值
        console.log(s1.values())//SetIterator {"blue", "red", "green"}
        //键值对
        console.log(s1.entries())//SetIterator {"blue" => "blue", "red" => "red", "green" => "green"}
        // foreach
        s1.forEach((...args)=>{
            console.log(args,this)
        //(3) ["blue", "blue", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
        //(3) ["red", "red", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
        //(3) ["green", "green", Set(3)] Window {parent: Window, opener: null, top: Window, length: 0, frames: Window, …}
        },{"num":100})// 添加对象没有作用

set 数组去重

      //数组去重
          let s1 = new Set([1,1,2,2,3,4,4,4,45,6,7,8,89,0,0])
          //[1, 2, 3, 4, 45, 6, 7, 8, 89, 0]
          console.log([...s1])
        // 获取类数组对象
        let divs = document.getElementsByTagName("div")
        let s2 = new Set(divs);
        console.log(s2)  //Set(3) {div, div, div}
        //类数组去重
        function demo(){
            console.log(new Set(arguments))//[1,2,4,5]
            console.log(Array.from(new Set(arguments)))
        }
        demo(1,2,2,2,4,5,5)

Set 交集 并集 差集

     //数组的交集 并集 差集
        let a = [1,2,3]
        let b = [2,3,4]
        //并集
        let s1 = new Set([...a,...b])
        // console.log([...s1])//[1,2,3,4]
        //交集 filter 方法返回值是数组 返回值传递给 new Set函数
        let s2 = new Set(a.filter(item=>b.indexOf(item)>=0))
        //差集
        let s3 = new Set(a.filter(item=>b.indexOf(item)===-1))
        console.log(Array.from(s1),Array.from(s2),Array.from(s3)) // [1, 2, 3, 4] (2) [2, 3] [1]   
        

Set 对象映射

  //======set对象 交集  并集 差集
        let s1 = new Set([1,2,3,4])
        let s2 = new Set([4,3,5,7])
        //并集
        let s = new Set([...s1,...s2])
        // 交集
        let s3 = new Set(Array.from(s1).filter(item =>s2.has(item)))
        //差集
        let s4 = new Set(Array.from(s1).filter(item =>!s2.has(item)))
        console.log(s,s3,s4)//[1,2,3,4,5,7]

Set 对象映射

    // ==========Set 对象映射
        let s1 = new Set([1,2,3])
        console.log(new Set(Array.from(s1).map(item=>item ** 3)))
        console.log(new Set([...s1].map(item=> item ** 3)))    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!