se6 Set数据结构和Map数据结构

Set数据结构

简单来说set就类似一个去重的数组。

  • add
  • size
  • has
  • delete
  • clear
    let a1 = new Set([1,1,2,2,3,3]) //定义一个Set
    console.log(a1) //Set(3) {1, 2, 3}
 	console.log(a1.size) // 3 返回set的长度
    console.log([...a1]) //[1, 2, 3]  因为Set包含iterator接口,所以可以通过展开运算符变成数组
    console.log(Array.from(a1)) //[1, 2, 3] // 普通变数组方法
    a1.add(4) // 添加元素
    a1.add(4)
    a1.add(5)
    console.log(a1) //Set(5) {1, 2, 3, 4, 5}
    console.log(a1.has(4))  // true  是否包含元素
    console.log(a1.delete(4)) // ture 删除元素并返回true,没有该元素返回false
    console.log(a1) //Set(4) {1, 2, 3, 5}
    console.log(a1.clear()) //undefined 清空所有元素
  • keys
  • values
  • entries
  • forEach
    这里值得注意的是 a1作为Set数据结构 去重之后是[1,2,3] 它的每一项的键名和键值都是一样的
 		let a1 = new Set([1, 1, 2, 2, 3, 3])
        for (let i of a1.keys()) {
            console.log(i) //键名
        }
        for (let i of a1.values()) {
            console.log(i) //键值
        }
        for (let i of a1.entries()) {
            console.log(i) // 键值对,这个可用于数组,可打印下标与值
        }
        a1.forEach((item, index) => {
            console.log(item, index) //遍历每个对象
        })

在这里插入图片描述
这里扩展一个set在开发中进行复杂去重的方法

    let list = [1,2,2,"starry","starry",{name:"starry"},{age:18},{name:"starry"},undefined,undefined,NaN,NaN]
        function uni(list){
            let res = new Set()
            return list.filter((item) => { 
                let id = JSON.stringify(item) 
                console.log(id)
                if(res.has(id)){
                    return false
                }else{
                    res.add(id)
                    return true
                }
            })
        }
        console.log(uni(list))

以上代码定义了一个名为 uni 的函数,用于从给定数组中筛选出唯一的元素,并返回一个新的数组。
具体的实现逻辑如下:
1.在函数开始时,定义一个空的 Set 对象 res,用于存储已经出现过的元素。
2.使用 filter 函数对输入的数组进行遍历和筛选。对于每个元素,都会执行回调函数。
3.在回调函数内部,首先将当前元素 item 转换成字符串形式,通过调用 JSON.stringify(item)。
4.然后,检查 res 集合中是否已经包含了转换后的字符串形式 id。如果是,则表示该元素已经出现过,应该不包含在结果数组中,因此返回 false。
5.如果 res 集合中不包含 id,则将其添加到 res 中,并返回 true,表示该元素需要包含在结果数组中。
6.最终,filter 函数会返回由满足条件的元素组成的新数组。对于给定的输入 list,调用 uni(list) 会返回一个只包含唯一元素的数组。
在这里插入图片描述

Map数据结构

类似于对象,也是键值对的集合,但是键的范围不在限于字符串,各种类型都可以当键

        let m1 = new Map([
            ["name","starry"],
            ["age",18],
            [{b:1},"佛罗里达州"]
        ])
        console.log(m1)

对象也可以当键名,而且包含iterator
在这里插入图片描述

  • set
  • size
  • get
  • has
  • delete
  • clear
        let m1 = new Map([
            ["name","starry"],
            ["age",18],
            [{b:1},"佛罗里达州"]
        ])
        console.log(m1)
        m1.set("code",200)  //添加元素
        console.log(m1)
        console.log(m1.get("age")) // 18  通过键名获取元素,
        console.log(m1.get({b:1})) // undefined  对象无法判断,这里可以在声明一个新的变量获取
        console.log(m1.has("name")) // true 判断是否包含元素
        console.log(m1.delete("name")) // true
        console.log(m1)
        m1.clear()
        console.log(m1)

在这里插入图片描述

  • keys
  • values
  • entries
  • forEach
    参考Set
        let m1 = new Map([
            ["name","starry"],
            ["age",18],
            [{b:1},"佛罗里达州"]
        ])
        for (let i of m1.keys()) {
            console.log(i) 
        }
        for (let i of m1.values()) {
            console.log(i)
        }
        for (let i of m1.entries()) {
            console.log(i)
        }
        m1.forEach((item, index) => {
            console.log(item, index)
        })

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值