美文网首页
map数据类型

map数据类型

作者: 希染丶 | 来源:发表于2019-06-19 17:31 被阅读0次

    Map基本用法

    js对象,本质上是键值对的集合(Hash结构),传统上只能用字符串做键值,给使用带来限制;
    为了解决之歌问题,es6提供了Mao结构;
    类似于对象,也是键值对的集合,但是键值不限于字符串,各种类型都可以做键值。

    const m = new Map();
    const o = {p: 'Hello World'};
    
    m.set(o, 'content')
    m.get(o) // "content"
    
    m.has(o) // true
    m.delete(o) // true
    m.has(o) // false
    

    代码中使用Map结构的set方法,将对象o当做m的一个键,然后又使用get方法读取这个键,接着使用delete删除了这个键

    作为构造函数,Map可以接受数组作为参数。该数组的成员是一个个表示键值对的数组

    const map = new Map([
      ['name', '张三'],
      ['title', 'Author']
    ]);
    
    map.size // 2
    map.has('name') // true
    map.get('name') // "张三"
    map.has('title') // true
    map.get('title') // "Author"
    

    Map构造函数接受数组作为参数,实际上执行的是下面的算法。

    const items = [
      ['name', '张三'],
      ['title', 'Author']
    ];
    
    const map = new Map();
    
    items.forEach(
      ([key, value]) => map.set(key, value)
    );
    

    实例属性和方法

    1.size: 返回Map结构成员总数
    2.set(key, value) : 设置键名key对应的键值为value,返回整个Map结构,如果存在key,更新键值
    3.get(key): 读取key对应键值,如果没有返回undefined
    4.has(key):返回一个布尔值,表示是否在当前Map对象中
    5.delete(key): 删除某个键,删除成功返回true,失败false
    6.clear(): 清除掉所有成员,没有返回值

    遍历方法

    1.keys()
    2.values()
    3.entries()
    4.forEach()

    遍历的就是插入顺序

    Map与其他数据类型装换

    1.map转数组

    var map = new Map([
      ['a','A']
    ]);
    var a = [...map];
    

    2.数组转map
    将数组传入 Map 构造函数,就可以转为 Map

      new Map([
        [true, 7],
        [{foo: 3}, ['abc']]
      ])
    

    3.Map转对象
    如果所有Map键值都是字符串,可以无损转为对象
    如果如果有非字符串的键名,那么这个键名会被转成字符串,再作为对象的键名

    遍历Map给对象赋值即可

    4.对象转map
    遍历对象给map赋值

    var a = {
      x:1,
      y:2
    }
    var map = new Map()
    for(let i in a){
      map.set(i,a[i])
    }
    
    // Map(2) {"x" => 1, "y" => 2}
    

    weakMap

    和Map两个区别:
    1.只接受Object作为键名

    const map = new WeakMap();
    map.set(1, 2)
    // TypeError: 1 is not an object!
    map.set(Symbol(), 2)
    // TypeError: Invalid value used as weak map key
    map.set(null, 2)
    // TypeError: Invalid value used as weak map key
    

    2.键名所指向的对象,弱引用,不计入垃圾回收机制
    只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。
    也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用

    api上的区别: 没有遍历操作,没有size属性

    使用场景:DOM节点作为键名

    相关文章

      网友评论

          本文标题:map数据类型

          本文链接:https://www.haomeiwen.com/subject/nstlqctx.html