一个简单的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 实现GridView异步排序、分页的代码
Feb 06 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
详解Vue中使用插槽(slot)、聚类插槽
Apr 12 Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 Javascript
npm qs模块使用详解
Feb 07 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 Javascript
vue 实现图片懒加载功能
Dec 31 Vue.js
使用jquery实现轮播图效果
Jan 02 jQuery
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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
js数组操作学习总结
2013/11/04 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
javascript验证身份证号
2015/03/03 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
土木工程求职信
2014/05/29 职场文书
预防煤气中毒方案
2014/06/16 职场文书
幼儿园感谢信
2015/01/21 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
运动会通讯稿300字
2015/07/20 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android