一个简单的JavaScript Map实例(分享)


Posted in Javascript onAugust 03, 2016

用js写了一个Map,带遍历功能,请大家点评下啦。

//map.js

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); 
} 
//testMap.htm

?
<html> 
<head> 
<title>Test Map</title> 
<script language="javascript" src="map.js"> 
</script> 
</head> 
<body> 
<input type="button" value="test" onclick="testMap()"> 
</body> 
</html>

以上这篇一个简单的JavaScript Map实例(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
Jun 28 Javascript
javascript调试过程中找不到哪里出错的可能原因
Dec 16 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
Apr 17 Javascript
yepnope.js使用详解及示例分享
Jun 23 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
详解javascript事件绑定使用方法
Oct 20 Javascript
Javascript 之封装(Package)
Sep 14 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
面试题:react和vue的区别分析
Apr 08 Javascript
node将geojson转shp返回给前端的实现方法
May 29 Javascript
vue props对象validator自定义函数实例
Nov 13 Javascript
AngularJS教程 ng-style 指令简单示例
Aug 03 #Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 #Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 #Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 #Javascript
js删除Array数组中指定元素的两种方法
Aug 03 #Javascript
AngularJS基础 ng-src 指令简单示例
Aug 03 #Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 #Javascript
You might like
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP安全编程之加密功能
2006/10/09 PHP
通过html表格发电子邮件
2006/10/09 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php正则修正符用法实例详解
2016/12/29 PHP
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
查看Django和flask版本的方法
2018/05/14 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
逻辑链路控制协议
2016/10/01 面试题
竞选部门副经理的自荐书范文
2014/02/11 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫