Set 数据结构

Set 是一种 集合数据结构,它类似于数组,但与数组不同的是它没有重复值

一、创建 Set

创建一个新的集合,通过add方法添加数据

const mySet = new Set()
mySet.add(1)
mySet.add(2)
mySet.add(2)
mySet.add(3)
mySet.add(4)
console.log(mySet)

直接初始化集合

const mySet = new Set([1,2,2,3,4])
console.log(mySet)

上面两种代码均打印如下:

二、实例的属性和方法

  • size: 返回Set实例的成员总数 
    console.log(mySet.size) // 返回集合的大小
  • add(value): 添加某个value 
    mySet.add(5)
  • delete(value): 删除某个值,返回一个布尔值,表示删除是否成功
    mySet.delete(2)
  • has(value):  返回一个布尔值,表示该值是否为Set的成员
    console.log(mySet.has(2))// false
  • clear: 清除所有成员,没有返回值
    mySet.clear()

三、遍历

  • keys(): 返回键名的遍历器
         for (let i of mySet.keys()){
            console.log(i) //1,2,3,4
          }
  • values(): 返回键值的遍历器
          for (let i of mySet.values()){
            console.log(i) //1,2,3,4
          }
  • entries(): 返回键值对的遍历器
        for (let i of mySet.entries()){
            console.log(i) //[1,1], [2,2],[3,3],[4,4] 键、值都相等
          }
  • forEach(): 遍历每个成员 
          // Set虽然类似数组,但没有索引值,只有具体的值。所以遍历的index和value相等
          mySet.forEach((value,index)=>{
            console.log(value) //1,2,3,4
            console.log(index) //1,2,3,4
          });
  • for...of:Set内部已实现了迭代器,所以可以是用for...of
         for (let value of mySet){
            console.log(value) //1,2,3,4
          }

四、将Set转化成数组:

  • 使用扩展运算符
console.log([...mySet]) //[1,2,3,4]
  • 使用Array.from()
    console.log(Array.from(mySet)) //[1,2,3,4]

 

五、复杂数据结构去重

 //复杂数据结构去重
    function uni(arr){
        let res = new Set()
        const newarr =  arr.filter(item=>{
            let id = JSON.stringify(item)
            if(res.has(id)){
                return false
            }else{
                res.add(id)
                return true
            }
        })
        return newarr
    }
    var arr=[
        1,
        'ceshi',
        {name:'zhanfsan'},
        {name:'zhanfsan'},
        {name:'lisi'},
        [1,2],
        [3,4],
        [1,2],
        undefined,
        NaN,
        undefined,
        NaN
    ]
    var newarr = uni(arr)
    console.log(newarr)

 

posted @ 2024-09-25 16:59  yangkangkang  阅读(39)  评论(0编辑  收藏  举报