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 相关文章推荐
BOM与DOM的区别分析
Oct 26 Javascript
javascript显示用户停留时间的简单实例
Aug 05 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
jquery常用方法及使用示例汇总
Nov 08 Javascript
moment.js轻松实现获取当前日期是当年的第几周
Feb 05 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
js编写的treeview使用方法
Nov 11 Javascript
用Fundebug插件记录网络请求异常的方法
Feb 21 Javascript
ES6 Promise对象概念及用法实例详解
Oct 15 Javascript
优化Vue中date format的性能详解
Jan 13 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 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
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
python select.select模块通信全过程解析
2017/09/20 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
Java面试笔试题大全
2016/11/23 面试题
自荐信格式的六要素
2013/09/21 职场文书
工商企业管理应届生求职信
2013/11/03 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
成本会计实训报告
2014/11/05 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
体育教师个人工作总结
2015/02/09 职场文书
门球健将观后感
2015/06/16 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL