ECMAScript-----(八)Map数据结构

背景

JS的对象(Object)本质上是键值对的集合(Hash结构),传统上只能用字符串当成键,即Object提供了“字符串--值”的对应,Map结构解决了这一问题,提供了“值--值”的对应,是一种更完善的Hash结构实现

说明

 类似于对象,但“键”可使用任意类型值

map实例的属性和方法

  1. 属性

    //size属性
    let map = new Map();
    map.set('foo', true);
    map.set('bar', false);
    
    map.size // 2
  2. 方法

    1. 遍历方法
      • keys()
        let map = new Map([
          ['F', 'no'],
          ['T',  'yes'],
        ]);
        
        for (let key of map.keys()) {
          console.log(key);
        }
        // "F"
        // "T"
      • values()
        for (let value of map.values()) {
          console.log(value);
        }
        // "no"
        // "yes"
      • entries()
        for (let item of map.entries()) {
          console.log(item[0], item[1]);
        }
        // "F" "no"
        // "T" "yes"
        
        //等同于
        for (let [key, value] of map.entries()) {
          console.log(key, value);
        }
        
        //等同于
        for (let [key, value] of map) {
          console.log(key, value);
        }
      • foreach()
        map.forEach(function(value, key, map) {
          console.log("Key: %s, Value: %s", key, value);
        });
        
        
        //foreach可接受第二个参数,用来绑定this
        var reporter = {
          report: function(key, value) {
            console.log("Key: %s, Value: %s", key, value);
          }
        };
        
        map.forEach(function(value, key, map) {
          this.report(key, value);
        }, reporter);
    2. 操作方法
      • set(key,value)
        var m = new Map();
        
        m.set("edition", 6)        // 键是字符串
        m.set(262, "standard")     // 键是数值
        m.set(undefined, "nah")    // 键是undefined
        
        //set方法返回的是Map本身,故可使用链式写法
        let map = new Map()
          .set(1, 'a')
          .set(2, 'b')
          .set(3, 'c');
      • get(key)
        var m = new Map();
        
        var hello = function() {console.log("hello");}
        m.set(hello, "Hello ES6!") // 键是函数
        
        m.get(hello)  // Hello ES6!
        
        //get方法返回key对应的键值,如果找不到key,则返回undefined
      • has(key)
        var m = new Map();
        
        m.set("edition", 6);
        m.set(262, "standard");
        m.set(undefined, "nah");
        
        m.has("edition")     // true
        m.has("years")       // false
        m.has(262)           // true
        m.has(undefined)     // true
        
        //has方法返回一个bool值,表示某个键是否存在Map数据结构中
      • delete(key)
        var m = new Map();
        m.set(undefined, "nah");
        m.has(undefined)     // true
        
        m.delete(undefined)
        m.has(undefined)       // false
      • clear()
        let map = new Map();
        map.set('foo', true);
        map.set('bar', false);
        
        map.size // 2
        map.clear()
        map.size // 0
        
        //clear方法清除所有成员,没有返回值 

注意

  1. map.get(key)取值为何为undefined?
    var map = new Map();
    
    map.set(['a'], 555);
    map.get(['a']) // undefined
    
    //解析:与【”a“】===【”a“】判断为false一样,需要将数组和对象用引用保存起来,后面才能调到相同的地址,每次使用【】都是new Array
    //因为每次的内存地址不同,所以实际上这是两个键,get方法无法读取一个新键,故返回undefined
      
  2. 如何将data中的数据使用map结构
    //1、data中定义数据
    item: [
        ["name","张三"],
        ["title","里斯"]
    ]
    
    //2、构造函数
    let map = new Map();
    
    //3、将item中数据置于map中
    item.foreach( ([key,value]) => map.set(key,value) );
posted @ 2021-04-20 20:19  会转圈圈的哆瑞米  阅读(66)  评论(0编辑  收藏  举报