ES6 Set

<html>

<head>
    <title>ES6 Set</title>
</head>

<body>




    <script>
        /*
         *Set 对象 :Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
         */

        /*Set 中的特殊值
         *Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
         *+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
         *undefined 与 undefined 是恒等的,所以不重复;
         *NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。
         */
        {
            let mySet = new Set();
            mySet.add(1);
            mySet.add(5);
            mySet.add(5);
            for (var value of mySet) {
                console.log(value);//这里输出 1 , 5  set 不可重复  体现set唯一性
            }
            mySet.add("someText");
            for (var value of mySet) {
                console.log(value);//这里输出 1 , 5  ,someText set 体现set多样性
            }
            var o = { name: "小明", age: "19" };
            let mySets = new Set();
            mySets.add(o);
            mySets.add({ name: "小明", age: "19" });
            for (var value of mySets) {
                console.log(value);//这里输出{name:"小明",age:"19"}, {name:"小明",age:"19"}  ,虽然值相等,但是不是同一个对象,所有能存
            }
        }
        /*
         *类型转换
         */
        console.log("----------------------类型转换:分割线-------------------------------");
        {
            //Array转set
            var mySet = new Set(["java"], ["javascript"], ["jQuery"]);
            //set转Array
            var myArray = [...mySet];
            //String转Set
            var myStringSet = new Set('HELLOWORLD');
            for (var value of myStringSet) {
                console.log(value);//这里按字符输出 'H' 'E'......
            }
        }
        /*
        *Set 对象作用
        */
        //数组去重
        console.log("----------------------Set 对象作用:数组去重-------------------------------");
        {
            var mySet = new Set([1, 2, 3, 4, 4, 4, 5]);
            console.log([...mySet]);//真的去掉了,太香了吧,ES6
        }
        //并集
        console.log("----------------------Set 对象作用:并集-------------------------------");
        {
            var a = new Set([1, 2, 3]);
            var b = new Set([4, 3, 2]);
            var union = new Set([...a, ...b]);//并集,相同的应该是直接覆盖,我不太确定
            console.log(union);
        }
        //交集
        console.log("----------------------Set 对象作用:交集-------------------------------");
        {
            var a = new Set([1, 2, 3]);
            var b = new Set([4, 3, 2]);
            var union = new Set([...a].filter(x => b.has(x)));
            //上面箭头函数,下面是正常的函数,作用一样 [...a]将Set转换成 数组
            var unions = new Set([...a].filter(function (x) {
                return b.has(x);
            }));
            console.log(union);
            console.log("----------------------unions-------------------------------");
            console.log(unions);
        }
        //差集
        console.log("----------------------Set 对象作用:差集-------------------------------");
        {
            var a = new Set([1, 2, 3]);
            var b = new Set([4, 3, 2]);
            var union = new Set([...a].filter(x => !b.has(x)));//和交集相反
            console.log(union);
        }

    </script>
</body>

</html>

教程来源于:https://www.runoob.com/w3cnote/es6-tutorial.html

 

posted @ 2020-09-26 13:13  KwFruit  阅读(156)  评论(0编辑  收藏  举报