一个简单的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 相关文章推荐
用prototype实现的简单小巧的多级联动菜单
Mar 24 Javascript
读jQuery之七 判断点击了鼠标哪个键的代码
Jun 21 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
JS+CSS实现精美的二级导航效果代码
Sep 17 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
jQuery实现一个简单的轮播图
Feb 19 Javascript
JS实现动态添加DOM节点和事件的方法示例
Apr 28 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 Javascript
ES6 Iterator接口和for...of循环用法分析
Jul 31 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
详解Vue中的Props与Data细微差别
Mar 02 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导出oracle库的php代码
2009/04/20 PHP
php与paypal整合方法
2010/11/28 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
node.js中的fs.utimesSync方法使用说明
2014/12/15 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
python获取当前目录路径和上级路径的实例
2018/04/26 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
python和php哪个容易学
2020/06/19 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
丑小鸭教学反思
2014/02/03 职场文书
餐饮营销方案
2014/02/23 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
合作协议书
2014/04/23 职场文书
抽样调查项目计划书
2014/04/24 职场文书
工商局个人工作总结
2015/03/03 职场文书
导游词之广西漓江
2019/11/02 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技