一个简单的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 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
js实现网页标题栏闪烁提示效果实例分析
Nov 20 Javascript
JavaScript的React框架中的JSX语法学习入门教程
Mar 05 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
Vue项目自动转换 px 为 rem的实现方法
Oct 29 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
js+html5 canvas实现ps钢笔抠图
Apr 28 Javascript
vue-cli 关闭热更新操作
Sep 18 Javascript
js回到页面指定位置的三种方式
Dec 17 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
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
php实现图片缩略图的方法
2016/03/29 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python实现装饰器、描述符
2018/02/28 Python
Python2与Python3的区别实例分析
2019/04/11 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
python实现图像拼接
2020/03/05 Python
罗技美国官网:Logitech美国
2020/01/22 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
当当网软件测试笔试题
2015/11/24 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
通信工程毕业生求职信
2013/11/16 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
导游词之日月潭
2019/11/05 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL