「 Map最佳实践」什么时候适合使用 Map 而不是 Object

参考链接:「 Map最佳实践」什么时候适合使用 Map 而不是 Object

// Map的使用方法
        const map = new Map()
        map.set(1, 'value')
        map.set(true, 'value')
        map.set({ 'key': 'value' }, 'value')
        for (const key of map.keys()) {
            console.log(key) // 1 true {'key':'value'}
        }
        for (const value of map.values()) {
            console.log(value) // value value value
        }

        // 「Map」支持正则表达式作为键名,这在Object是不被允许的直接报错
        const map1 = new Map()
        map1.set(/^1[3456789]\d{9}$/, '手机号正则')
        console.log(map1) // Map(1) {/^1[3456789]\d{9}$/ => "手机号正则"}
        console.log(typeof map1) // Object


        // 「Map」 是可迭代的,可以直接进行迭代,例如forEach循环或者for...of...循环
        const map333 = new Map()
        map333.set('key1', 'value1')
        map333.set('key2', 'value2')
        map333.set('key3', 'value3')
        console.log(map333) // Map(3) {"key1" => "value1", "key2" => "value3", "key3" => "value3"}
        map333.forEach(item => {
            console.log(item) // value1 value2 value3
        })
        map333.forEach((key, value) => {
            console.log(key, value)
            // key1 value1
            // key2 value2
            // key3 value3
        })
        // for ... of
        for (const entry of map333) {
            console.log(entry)
            // ["key1", "value1"]
            // ["key2", "value2"]
            // ["key3", "value3"]
        }
        // 但是对于「Object」是不能直接迭代的,当你尝试迭代将导致报错
        const object = {
            key1: 'value1',
            key2: 'value2',
            key3: 'value3'
        }
        // for (const entry of object) {
        //     console.log(entry) // Uncaught TypeError: object is not iterable
        // }
        // 这时候你就需要一个额外的步骤来检索其键名、键值或者键值对
        for (const key of Object.keys(object)) {
            console.log(typeof key) // string
            console.log(key) // key1 key2 key3
        }

        for (const value of Object.values(object)) {
            console.log(value) // value1 value2 value3
        }

        for (const entry of Object.entries(object)) {
            console.log(entry)
            // ["key1", "value1"]
            // ["key2", "value2"]
            // ["key3", "value3"]
        }

        for (const [key, value] of Object.entries(object)) {
            console.log(typeof (key, value)) // string
            console.log((key, value))
            //"key1", "value1"
            //"key2", "value2"
            //"key3", "value3"
        }

        // 当然也可以使用for...in...进行遍历循环键名
        for (const key in object) {
            console.log(key)
            // key1
            // key2
            // key3
        }

        const object222 = {}
        object222['key1'] = 'value1'
        object222['key0'] = 'value2'
        console.log(object222) // {key1: "value1", key0: "value2"}
        object222[20] = 'value20'
        console.log(object222) // {20: "value20", key1: "value1", key0: "value2"} 乱序
        console.log(Object.keys(object222).length) // 3

        var map666 = new Map()
        map.set('key', 'value')
        console.log(JSON.stringify(map))  //"{}"

        var object666 = {key:'value'}
        console.log(JSON.stringify(object666)) // {"key":"value"}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值