ES6新增复杂数据类型Set

298 阅读1分钟

javascript内置对象

Object Array Date Math ...

Set

           => 复杂数据类型
           => 作用
                存储无序数据的集合
           => 属性和方法
                size
                add
                delete
                clear    
            =>遍历集合set forEach
            => 特点
                集合set中元素不能重复

创建

        let set = new Set() //空集合
        let set = new Set([1,2,{name:'jack'}, function(){},'hello'])
        创建方法类似数组,但不是数组,里面可以存储任意类型的值

size,判断集合内有几个元素

    <script>
        function test1(){
            let set = new Set([10,20])
            console.log(set)
            console.log('size :',set.size)
        }
    </script>

add,delete,clear添加与删除与清空

<button class="add">添加</button>
<button class="delete">删除</button>
    <script>
        const btnAdd = document.querySelector('.add')
        const btnDelete = document.querySelector('.delete')
        function test1(){
         btnAdd.addEventListener('click',function(){
                set.add(20)
                console.log(set)
            })
         btnDelete.addEventListener('click',function(){
                set.delete(20)
                // set.clear()
                //清空
                console.log(set)
            })

        }

foreach遍历

function test1(){
            let set = new Set([10,20])
            set.forEach(function(item){
                console.log(item)
            })
}

数组去重

indexof或includes

indexof,查找值是否在数组里,不在返回-1
includes,同上,不过返回的是布尔值

indexof

 定义一个新数组,存储不重复元素
 遍历原数组, 判断新数组中是否存在原数组元素,如果不存,加入新数组
 let arr = [1,2,1,2,4]
 let newArr = []
               arr.forEach((item)=>{
                     if(newArr.indexOf(item) == -1){
                            newArr.push(item)
                        }
                    })

includes

   let arr = [1,2,1,2,4]
   let newArr = []
            arr.forEach((item)=>{
                 if(newArr.includes(item) == false){
                      newArr.push(item)        
                  }
               })
               console.log(newArr)

双重for循环 + splice

for(let i = 0; i < arr.length; i++){
                        let item = arr[i]
                        for(let j = i+1; j<arr.length; j++){
                            if(item == arr[j]){
                                arr.splice(j,1)
                                j--
                            }
                        }
                    }

利用集合特性进行数组去重

数组转集合再转数组
 function test3(){
             let arr = [10,20,10,30,20]
             console.log(arr)
             let set = new Set(arr)
             arr = [...set]
             console.log(arr)
}
test3()

简写

let arr = [10,20,10,30,20]
arr = [...new Set(arr)]
console.log(arr)

集合转数组

原理就是把集合放进数组里面展开
function test2(){
            // 集合set转数据Array
            let set = new Set([10,20,30])
            let arr = [...set]//展开运算符
            console.log(arr)
            console.log(arr[0])
        }
        test2()