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 相关文章推荐
JS 树形递归实例代码
May 18 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
jquery 之 $().hover(func1, funct2)使用方法
Jun 14 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
jQuery简单实现两级下拉菜单效果代码
Sep 15 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 Javascript
概述VUE2.0不可忽视的很多变化
Sep 25 Javascript
Vue.JS入门教程之事件监听
Dec 01 Javascript
JS实现的简单表单验证功能完整实例
Oct 14 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
Feb 21 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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/05/11 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
js实现一键复制功能
2017/03/16 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
三方股东合作协议书范本
2014/09/28 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
建国大业观后感600字
2015/06/01 职场文书
市级三好生竞选稿
2015/11/21 职场文书
高中生物教学反思
2016/02/20 职场文书
在Docker容器中部署SQL Server
2022/04/11 Servers