Set 数据结构

1.基本用法

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

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

        let s = new Set();
        console.log(s); //Set(0) {size: 0}
        let s = new Set("hellor");
        console.log(s); //Set(5) {'h', 'e', 'l', 'o', 'r'}
        console.log([...s]); //['h', 'e', 'l', 'o', 'r']

        let s = new Set([1, 2, 3, 4]);
        console.log(s); // {1, 2, 3, 4}
        console.log([...s]); // [1, 2, 3, 4]

2.Set的用途

可以进行数组去重:代码如下:

        //使用set进行数组去重 方法一:
        let arr = [2, 3, 2, 3, 2, 3, 3, 4, 5];

        function getset(arrs) {
            let s = new Set(arrs);
            let arr1 = Array.from(s);
            return arr1;
        }
        console.log(getset(arr)); //[2, 3, 4, 5]
        //使用set进行数组去重 方法二:
        let arr = [2, 2, 3, 3, 5, 6, 6];

        function getset(arrs) {
            return [...new Set(arr)];
        }
        console.log(getset(arr)); // [2, 3, 5, 6]

字符串去重:代码如下:

 console.log([...new Set('helloe')].join('')); //helo

3.Set实例的操作方法

特点:数据不重复

        // Set实例的操作方法
        //特点:数据不重复

        let s = new Set();

        //1、add(value),添加某个值,返回实例本身
        console.log(s.add('a')); // {'a'}
        console.log(s.add('b')); //{'a', 'b'}

        s.add("c");
        s.add("d");
        s.add("c");
        console.log(s); //{'a', 'b', 'c', 'd'}相同的数据添加不进去



        //2、delete(value),删除某个值,返回布尔值,表示删除是否成功
        s.delete("a");
        console.log(s); //{'b', 'c', 'd'}



        //3、clear(),清空所有成员,没有返回值
        s.clear()
        console.log(s); //{size: 0}

4. Set实例的遍历方法

forEach方法:

        let s = new Set([1, 2, 3, 4, 5])
        s.forEach((v1, v2) => {
            console.log(v1 + ' : ' + v2);
            //  1 : 1
            //  2 : 2
            //  3 : 3
            //  4 : 4
            //  5 : 5
        });

 上面代码说明,forEach方法的参数就是一个处理函数。该函数的参数与数组的forEach一致,依次为键值、键名、集合本身(上例省略了该参数)。

  这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的。

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。

entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。

        let s = new Set([1, 2, 3, 4, 5]);

        keys();
        console.log(s.keys()); //{1, 2, 3, 4, 5}

        values();
        console.log(s.values()); //{1, 2, 3, 4, 5}

        entries()
        console.log(s.entries()); //{1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5}

        console.log(s); //{1, 2, 3, 4, 5}

5.Set和数组之间的相互转换

数组转Set:

        //把数组转换成set
        // 方法一
        let ary = [2, 3, 4, 55, 66];
        let s1 = new Set(ary);
        console.log(s1); //{2, 3, 4, 55, 66}

        //方法二
        let ary = [2, 3, 4, 55, 66];
        let s2 = new Set();
        ary.forEach(function(item) {
            s2.add(item);
        })
        console.log(s2); //{2, 3, 4, 55, 66}

Set转数组:

 //把set转为数组
        //方法一
        let s4 = new Set();
        s4.add(2);
        s4.add(8);
        s4.add(3);
        let arr4 = Array.from(s4);
        console.log(arr4); //[2, 8, 3]

        //方法二
        let s5 = new Set();
        s5.add(4);
        s5.add(9);
        s5.add(6);
        s5.add(5);

        let arr5 = [...s5];
        console.log(arr5);//[4, 9, 6, 5]

        //方法三
        let s6 = new Set();
        s6.add(9);
        s6.add(10);
        s6.add(11);
        s6.add(12);
        s6.add(13);

        let arr6 = [];
        s6.forEach(function(item) {
            arr6.push(item);
        });
        console.log(arr6); // [9, 10, 11, 12, 13]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值