深入理解Map数据结构(一) 之初识Map

前言:  在ES6之前, 存储键/值结构时采用的是 Object 对象存储的形式, 且键只能是字符串数字, ES6推出的 Symbol 出现之后, 键也可以是 Symbol 类型 . 同时ES6也推出了 Map 新型数据结构, 具备存储键/值形式的能力, 但键的类型就远远不受限制了, 可以是任意类型, 但两者的区别不仅如此, 在操作大量键/值数据时, 双方有着不同的优劣 . 由于 Map 的很多功能特性 Object 都能实现, 所以这也是 Map 略少的原因 .


目录

创建 Map 数据

操作 Map 数据的方法

实操演练


 

创建 Map 数据

通过 new 关键字来初始化 Map 数据, 传入的参数必须是可迭代对象

    // 创建一个空的 Map 数据结构
    const map1 = new Map(1, 23)
    console.log(Map); // 报错 参数是不可迭代的

    // 初始化 Map 数据结构
    const str = 'a'
    const fun = function() { }
    const obj = { a: 1 }
    const arr = []
    const map2 = new Map([
      [str, 'string'],
      [fun, 'function'],
      [obj, 'object'],
      [arr, 'array']
    ])

 查看输出第二个map结构的结果

操作 Map 数据的方法

map 构造函数内定义了操作 map 实例的很多方法

set添加键值对
get获取键对应的值
has查询是否有某个键
size查询map中有多少对键值
delete删除某个键
clear清空map中的数据
values获取map值的迭代器
keys获取map键的迭代器

entries

获取mao键值结构的迭代器
Symbol(Symbol.toStringTag)map转成字符串时构造函数的值

实操演练

1. set 添加键值

const map = new Map()
    map.set(1, 'one')

结果: 

2.  get 获取键对应的值

    const obj = { a: '1' }
    const map = new Map(
      [
        [1, 'one'],
        [obj, 'object']
      ]
    )
    const res1 = map.get(1)
    const res2 = map.get(obj)
    console.log(res1, res2);

结果: 

3. has 查询键

    const obj = { a: '1' }
    const map = new Map(
      [
        [1, 'one'],
        [obj, 'object']
      ]
    )
    const res1 = map.has(1)
    const res2 = map.has(obj)
    const res3 = map.has('a')
    console.log(res1, res2, res3); // true true false

4. size 查询有多少对键值

    const obj = { a: '1' }
    const map = new Map(
      [
        [1, 'one'],
        [obj, 'object']
      ]
    )
    console.log(map.size); // 2

5. delete 删除键

   const obj = { a: '1' }
    const map = new Map(
      [
        [1, 'one'],
        [obj, 'object']
      ]
    )
    map.delete(1)
    console.log(map);

 打印结果 : 

6. clear 清空键

   const obj = { a: '1' }
    const map = new Map(
      [
        [1, 'one'],
        [obj, 'object']
      ]
    )
    map.clear()
    console.log(map);

打印结果 :  

 7. values  值迭代器

想要把迭代器转成数字统一使用 Array.from

    const str = 'a'
    const fun = function() { }
    const obj = { a: 1 }
    const arr = []
    const map2 = new Map([
      [str, 'string'],
      [fun, 'function'],
      [obj, 'object'],
      [arr, 'array']
    ])
    console.log(map2.values());
    console.log(Array.from(map2.values()));

 

 8. keys    键迭代器

    const str = 'a'
    const fun = function() { }
    const obj = { a: 1 }
    const arr = []
    const map2 = new Map([
      [str, 'string'],
      [fun, 'function'],
      [obj, 'object'],
      [arr, 'array']
    ])
    console.log(Array.from(map2.keys()));
    console.log(map2.keys());

 9. entries 键值迭代器

    const str = 'a'
    const fun = function() { }
    const obj = { a: 1 }
    const arr = []
    const map2 = new Map([
      [str, 'string'],
      [fun, 'function'],
      [obj, 'object'],
      [arr, 'array']
    ])
    console.log(Array.from(map2.entries()));
    console.log(map2.entries());

 

 10. Symbol(Symbol.toStringTag)  转字符串构造函数的值

    const str = 'a'
    const fun = function() { }
    const obj = { a: 1 }
    const arr = []
    const map2 = new Map([
      [str, 'string'],
      [fun, 'function'],
      [obj, 'object'],
      [arr, 'array']
    ])
    console.log(map2[Symbol.toStringTag]);
    console.log(map2.toString());

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值