zoukankan      html  css  js  c++  java
  • 数据结构map

    map是ES提供的一种字典数据结构。

    字典结构——用来存储不重复key的hash结构。不同于集合(set)的是,字典使用的是键值对的形式来存储数据

    JavaScript对象(object:{})只能用字符串来当key,这对使用带来了不便
    为了解决这个问题,ES6提供了map数据结构。其类似于对象,也是键值对的集合,但“key”的范围不仅限于字符串,而是各种类型的值都可以当做key。也就是说,object提供了“字符串-值”的对应结构,map则提供的是“值-值”的对应。是一种更加完善的hash结构

    对象对map结构的支持演示
    var data1={a:1},
          data2={b:2},
          obj={};
          //为obj对象添加属性(将data1和data2作为属性名)
          obj[data1]=1;
          obj[data2]=2;
          console.log(obj);
    可以看到结果并非我们需要的

    创建一个map
    const map=new Map([
         ['a',1],
         ['b',2]
    ]);
    console.log(map);
    上面的['a',1]代表,将a作为key,1作为value声明
    那么是否['a',1]中能写入第三个元素呢?答案是可以的,但是!ES6不会理你

    map类的属性——size     用于获取map的长度
    console.log(map.size);
    map类的方法——set   Map.set(key,value)  设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则生成新的键 
    console.log(map.set([1,2,3],'3元素的数组'));
    //也可以链式添加
    map.set('name','张三').set('age',28);
    console.log(map);
    map类的方法——get  Map.get(key)    读取key对应的键值,如果获取不到则返回undefined
    console.log(map.get('name'));
    获取数组对应的键值——后续补充
    map类的方法——delete   Map.delete(key)     删除某个键,如果删除成功返回true,否则返回false
    console.log(map.delete('name'));
    map类的方法——has      Map.has(key)        判断某个键是否存在于map中,返回布尔值
    console.log(map.has('age'));
    map类的方法——clear    Map.clear()         清除所有数据,没有返回值
    map.clear();
    map类的方法——keys     Map.keys()          返回键名的遍历器
    console.log(map.keys());
    map类的方法——values   Map.values()        返回键值的遍历器
    console.log(map.values());
    map类的方法——entries  Map.entries()       返回键值对的遍历器
    console.log(map.entries());
    map类的方法——forEach  map.forEach(function(){})   使用回调遍历每一个成员
    map.forEach(function (value, key, map) {
          console.log(`这是key:${key},这是value:${value},这是map本身:${map}`);
    })
    Map在使用过程中需要注意的地方
    1.在js中NaN是不等于自身的一种数据类型,但是在map中,多次set以NaN为key的数据的时候,会产生覆盖的行为。说明map会将NaN视为同一个键
    map.set(NaN,1).set(NaN,10);
    console.log(map);
    2.如果map数据中以空对象作为key({})的话,会发现,出现了两个key,这是因为每一个{}都是全新的引用,其不同的是内存地址。而反观上面的NaN,其地址只有一个,所以才会出现覆盖的情况
    map.set({},1).set({},2);
    console.log(map);

     















  • 相关阅读:
    多种方法求解八数码问题
    GridView编辑删除操作
    【翻译自mos文章】v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows)
    支持向量机通俗导论(理解SVM的三层境地)
    bootstrap课程13 bootstrap的官方文档中有一些控件的使用有bug,如何解决这个问题
    bootstrap课程12 滚动监听如何实现(bootstrap方式和自定义方式)
    bootstrap课程11 模态框如何使用
    bootstrap课程10 从外部引入视频到页面用什么标签
    bootstrap课程9 bootstrap如何实现动画加载进度条的效果
    bootstrap课程8 bootstrap导航条在不同设备上的显示效果如何
  • 原文地址:https://www.cnblogs.com/sky903700252/p/8798309.html
Copyright © 2011-2022 走看看