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 相关文章推荐
jQuery EasyUI 中文API Layout(Tabs)
Apr 27 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
javascript获取本机操作系统类型的方法
Aug 13 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
AngularJS  ng-table插件设置排序
Sep 21 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
利用Node.js对文件进行重命名
Mar 12 Javascript
canvas绘制一个常用的emoji表情
Mar 30 Javascript
浅谈Vue组件单元测试究竟测试什么
Feb 05 Javascript
如何编写一个 Webpack Loader的实现
Oct 18 Javascript
uni-app 微信小程序授权登录的实现步骤
Feb 18 Javascript
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
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
PHP asXML()函数讲解
2019/02/03 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
JavaScript知识点整理
2015/12/09 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
浅谈AngularJS中使用$resource(已更新)
2017/09/14 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
AngularJs分页插件使用详解
2018/06/30 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Linux下编译安装MySQL-Python教程
2015/02/02 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
python中selenium库的基本使用详解
2020/07/31 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
澳大利亚男士西服品牌:M.J.Bale
2018/02/06 全球购物
教师网络培训感言
2014/03/09 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
Python加密与解密模块hashlib与hmac
2022/06/05 Python