JavaScript中实现Map的示例代码

前端技术 2023/09/04 JavaScript

不废话了,直接贴代码了。

代码一:

var map=new Map();
map.put(\"a\",\"A\");map.put(\"b\",\"B\");map.put(\"c\",\"C\");
map.get(\"a\"); //返回:A
map.entrySet() // 返回Entity[{key,value},{key,value}]
map.containsKey(\'kevin\') //返回:false
function Map() { 
  this.keys = new Array(); 
  this.data = new Object(); 
  /** 
   * 放入一个键值对 
   * @param {String} key 
   * @param {Object} value 
   */ 
  this.put = function(key, value) { 
    if(this.data[key] == null){ 
      this.keys.push(key); 
      this.data[key] = value; 
    }else{ 
      this.data[key]=this.data[key]; 
    } 
    return true; 
  }; 
  /** 
   * 获取某键对应的值 
   * @param {String} key 
   * @return {Object} value 
   */ 
  this.get = function(key) { 
    return this.data[key]; 
  }; 
  /** 
   * 删除一个键值对 
   * @param {String} key 
   */ 
  this.remove = function(key) { 
    for(var i=0;i<this.keys.length;i++){ 
      if(key===this.keys[i]){ 
        var del_keys= this.keys.splice(i,1); 
        for(k in del_keys){ 
          this.data[k] = null; 
        } 
        return true; 
      } 
    } 
    return false; 
  }; 
  /** 
   * 遍历Map,执行处理函数 
   * 
   * @param {Function} 回调函数 function(key,value,index){..} 
   */ 
  this.each = function(fn){ 
    if(typeof fn != \'function\'){ 
      return; 
    } 
    var len = this.keys.length; 
    for(var i=0;i<len;i++){ 
      var k = this.keys[i]; 
      fn(k,this.data[k],i); 
    } 
  }; 
  /** 
   * 获取键值数组 
   * @return entity[{key,value},{key,value}] 
   */ 
  this.entrySet = function() { 
    var len = this.keys.length; 
    var entrys = new Array(len); 
    for (var i = 0; i < len; i++) { 
      entrys[i] = { 
        key : this.keys[i], 
        value : this.data[this.keys[i]] 
      }; 
    } 
    return entrys; 
  }; 
  /** 
   * 判断Map是否为空 
   */ 
  this.isEmpty = function() { 
    return this.keys.length == 0; 
  }; 
  /** 
   * 获取键值对数量 
   */ 
  this.size = function(){ 
    return this.keys.length; 
  }; 
  this.containsKey=function(key){ 
    return this.keys.filter(function(v){ 
      if(v===key){ 
        return key; 
      } 
    }).length>0; 
  }; 
  /** 
   * 重写toString 
   */ 
  this.toString = function(){ 
    var s = \"{\"; 
    for(var i=0;i<this.keys.length;i++){ 
      var k = this.keys[i]; 
      s += k+\"=\"+this.data[k]; 
      if(this.keys.length>i+1){ 
        s+=\',\' 
      } 
    } 
    s+=\"}\"; 
    return s; 
  }; 
  /** 
   * 解析字符串到Map 
   * {a=A,b=B,c=B,} 
   */ 
  this.parserStringAndAddMap=function(str){ 
    var count=0; 
    if(str && str.length>0){ 
      str=str.trim(); 
      var startIndex=str.indexOf(\"{\"),endIndex=str.lastIndexOf(\"}\"); 
      if(startIndex!==-1 && endIndex!==-1){ 
        str=str.substring(startIndex+1,endIndex); 
        var arrs= str.split(\",\"); 
        for(var i=0;i<arrs.length;i++){ 
          var kv=arrs[i].trim(); 
          if(kv.length>0 && kv.indexOf(\"=\")!==-1){ 
            var kv_arr=kv.split(\"=\"); 
            if(kv_arr.length==2){ 
              if(this.put(kv_arr[0].trim(),kv_arr[1].trim())){ 
                count++; 
              }else{ 
                console.error(\'error: kv:\'+kv); 
              } 
            } 
          } 
        } 
      }else{ 
        console.log(\"data error:\"+str); 
      } 
    }else{ 
      console.log(\'data is not empty\'); 
    } 
    return count; 
  }; 
} 

代码二:

Array.prototype.remove = function(s) {
  for (var i = 0; i < this.length; i++) {
    if (s == this[i])
      this.splice(i, 1);
  }
}
/**
 * Simple Map
 * 
 * 
 * var m = new Map();
 * m.put(\'key\',\'value\');
 * ...
 * var s = \"\";
 * m.each(function(key,value,index){
 *     s += index+\":\"+ key+\"=\"+value+\"\\n\";
 * });
 * alert(s);
 * 
 * @author dewitt
 * @date 2008-05-24
 */
function Map() {
  /** 存放键的数组(遍历用到) */
  this.keys = new Array();
  /** 存放数据 */
  this.data = new Object();
  /**
   * 放入一个键值对
   * @param {String} key
   * @param {Object} value
   */
  this.put = function(key, value) {
    if(this.data[key] == null){
      this.keys.push(key);
    }
    this.data[key] = value;
  };
  /**
   * 获取某键对应的值
   * @param {String} key
   * @return {Object} value
   */
  this.get = function(key) {
    return this.data[key];
  };
  /**
   * 删除一个键值对
   * @param {String} key
   */
  this.remove = function(key) {
    this.keys.remove(key);
    this.data[key] = null;
  };
  /**
   * 遍历Map,执行处理函数
   * 
   * @param {Function} 回调函数 function(key,value,index){..}
   */
  this.each = function(fn){
    if(typeof fn != \'function\'){
      return;
    }
    var len = this.keys.length;
    for(var i=0;i<len;i++){
      var k = this.keys[i];
      fn(k,this.data[k],i);
    }
  };
  /**
   * 获取键值数组(类似Java的entrySet())
   * @return 键值对象{key,value}的数组
   */
  this.entrys = function() {
    var len = this.keys.length;
    var entrys = new Array(len);
    for (var i = 0; i < len; i++) {
      entrys[i] = {
        key : this.keys[i],
        value : this.data[i]
      };
    }
    return entrys;
  };
  /**
   * 判断Map是否为空
   */
  this.isEmpty = function() {
    return this.keys.length == 0;
  };
  /**
   * 获取键值对数量
   */
  this.size = function(){
    return this.keys.length;
  };
  /**
   * 重写toString 
   */
  this.toString = function(){
    var s = \"{\";
    for(var i=0;i<this.keys.length;i++,s+=\',\'){
      var k = this.keys[i];
      s += k+\"=\"+this.data[k];
    }
    s+=\"}\";
    return s;
  };
}
function testMap(){
  var m = new Map();
  m.put(\'key1\',\'Comtop\');
  m.put(\'key2\',\'南方电网\');
  m.put(\'key3\',\'景新花园\');
  alert(\"init:\"+m);
  m.put(\'key1\',\'康拓普\');
  alert(\"set key1:\"+m);
  m.remove(\"key2\");
  alert(\"remove key2: \"+m);
  var s =\"\";
  m.each(function(key,value,index){
    s += index+\":\"+ key+\"=\"+value+\"\\n\";
  });
  alert(s);
}

以上内容通过两段代码给大家分享了JavaScript中实现Map,希望大家喜欢。

本文地址:https://www.stayed.cn/item/10984

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。