Map和Set的用法以及区别

Map

map是一组键值结构,类似JSON

        var map = new Map([["user",'小处'],["num",99]])
        map.set('u','哈')
        console.log(map)
        // Map(3) {'user' => '小处', 'num' => 99, 'u' => '哈'}

map的key不仅可以是字符串还可以是对象

        var obj = {name:"小如",age:99}
        let map = new Map()
        map.set(obj,"111")  
        console.log(map)
            //key : {name: '小如', age: 99}
            //value : "111"

Map常用语法

        //初始化map需要一个二维数组或者一个空map
        let map = new Map()
        // 添加key或者value值
        map.set('zhangsan','男')
        map.set('lisi','女')
        // 是否存在key,true or false
        map.has("zhangsan")//true
        map.has("wangwu")//false
        // 根据key获取value
        map.get("zhangsan")//男
        // 删除key为zhangsan的value
        map.delete("zhangsan")

map中一个key只能对应一个value,多次对一个key放入value,后面的值会把前面的值覆盖掉

        var map = new Map()
        map.set("zhangsan",'男')
        map.set("zhangsan",'女')
        console.log(map)//Map(1) {'zhangsan' => '女'}

Set

Set对象类似数组,且成员的值都是唯一的

        var set = new Set([1,2,3,4,55])

Set最常见的用法是用来去重

        var arr = [1,2,3,4,5,2,3,4,5]
        var arr2 = [...new Set(arr)]
        console.log(arr2)//[1, 2, 3, 4, 5]

Set常用语法

            // 初始化一个Set,需要一个Array数组,要么空Set
            var set = new Set([1,2,3,4,5,6])
            // 添加元素
            set.add(7)
            // 删除元素
            set.delete(3)
            // 检测元素
            set.has(6)

Map和Set的区别

  • a、这两种方法都有很快的查找速度

  •         var lng = 100
            let arr = new Array(lng).fill(2)
            let set = new Set()
            let map = new Map()
            
            for(var i = 0;i<lng;i++){
                arr[i]=i
                set.add(i)
                map.set(i,arr[i])
            }
            console.log(arr)
            console.log(set)
            console.log(map)
            //Array
            console.time()
                for(var j = 0;j<lng;j++){
                    arr.includes(j)
                }
            console.timeEnd()
            //set
            console.time()
                for(var j = 0;j<lng;j++){
                    set.has(j)
                }
            console.timeEnd()
            //map
            console.time()
                for(var j = 0;j<lng;j++){
                    map.has(j)
                }
            console.timeEnd()
            // default: 0.011962890625 ms
            // default: 0.007080078125 ms
            // default: 0.013916015625 ms
    
  • b、初始化需要的值不一样,Map需要一个二维数组或者一个空Map,Set需要一个数组或者一个空Set

  • c、Map和Set都不允许键值重复

  • d、Map的键值是不能修改的,但是键对应的值是可以修改的;Set不能通过迭代器来改变Set的值,因为Set的值就是键。

  • e、Map是键值对的存在,值也不作为键;而Set没有value只有key,value就是key

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值