一个简单的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 相关文章推荐
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 Javascript
数组方法解决JS字符串连接性能问题有争议
Jan 12 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
Sep 05 Javascript
实例说明为什么不要行内使用javascript
Apr 18 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
React Native react-navigation 导航使用详解
Dec 01 Javascript
JS工厂模式开发实践案例分析
Oct 17 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
jQuery.each()用法分享
2012/07/31 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
python判断windows隐藏文件的方法
2014/03/21 Python
Python易忽视知识点小结
2015/05/25 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
python正则表达式面试题解答
2020/04/28 Python
对python中dict和json的区别详解
2018/12/18 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
python cumsum函数的具体使用
2019/07/29 Python
Django中URL的参数传递的实现
2019/08/04 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
python如何调用php文件中的函数详解
2020/12/29 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
工作自我评价怎么写
2014/01/29 职场文书
网络书店创业计划书
2014/02/07 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
资料员岗位职责范本
2015/04/13 职场文书
导游词之上海豫园
2019/10/24 职场文书
python开发飞机大战游戏
2021/07/15 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers