一个简单的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 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
封装的原生javascript弹出层代码
Sep 24 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
Apr 24 Javascript
Jquery插件编写简明教程
Mar 25 Javascript
Extjs根据条件设置表格某行背景色示例
Jul 23 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
JS使用单链表统计英语单词出现次数
Jun 16 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
vue-devtools的安装步骤
Apr 23 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 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
理解php Hash函数,增强密码安全
2011/02/25 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
PHP goto语句用法实例
2019/08/06 PHP
JS 控制CSS样式表
2009/08/20 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python进阶篇之字典操作总结
2016/11/16 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
python实现Windows电脑定时关机
2018/06/20 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
揠苗助长教学反思
2014/02/04 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
个人委托书如何写
2014/09/25 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书