JavaScript中实现Map的示例代码


Posted in Javascript onSeptember 09, 2015

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

代码一:

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,希望大家喜欢。

Javascript 相关文章推荐
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
Bootstrap每天必学之导航组件
Apr 25 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
Angular directive递归实现目录树结构代码实例
May 05 Javascript
js 两数组去除重复数值的实例
Dec 06 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 Javascript
javascript实现扫雷简易版
Aug 18 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
Sep 09 #Javascript
javascript实现日期时间动态显示示例代码
Sep 08 #Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 #Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 #Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 #Javascript
js淡入淡出焦点图幻灯片效果代码分享
Sep 08 #Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 #Javascript
You might like
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
建立动态的WML站点(三)
2006/10/09 PHP
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php session处理的定制
2009/03/16 PHP
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP读取目录树的实现方法分析
2019/03/22 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
jQuery UI Autocomplete 体验分享
2012/02/14 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
javascript中的this详解
2014/12/08 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
使用python在本地电脑上快速处理数据
2017/06/22 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
学校门卫岗位职责
2014/03/16 职场文书
精彩的广告词
2014/03/19 职场文书
法制宣传口号
2014/06/16 职场文书
商场促销活动策划方案
2014/08/18 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL