一个简单的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 相关文章推荐
理解Javascript_09_Function与Object
Oct 16 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
Nov 23 Javascript
jquery实现简单的瀑布流布局
Dec 11 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
关于 angularJS的一些用法
Nov 29 Javascript
10分钟上手vue-cli 3.0 入门介绍
Apr 04 Javascript
详解swiper在vue中的应用(以3.0为例)
Sep 20 Javascript
详解async/await 异步应用的常用场景
May 13 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并发访问实例代码
2012/09/06 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
五段实用的js高级技巧
2011/12/20 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jQuery配合coin-slider插件制作幻灯片效果的流程解析
2016/05/13 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
python数据结构之二叉树的遍历实例
2014/04/29 Python
基于python编写的微博应用
2014/10/17 Python
17个Python小技巧分享
2015/01/23 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
快速入手Python字符编码
2016/08/03 Python
Python批量更改文件名的实现方法
2017/10/29 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python opencv如何实现图片绘制
2020/01/19 Python
pycharm安装及如何导入numpy
2020/04/03 Python
Python configparser模块操作代码实例
2020/06/08 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
用python批量下载apk
2020/12/29 Python
python 高阶函数简单介绍
2021/02/19 Python
比驿:全球酒店比价网
2018/06/20 全球购物
PHP面试题及答案二
2015/05/23 面试题
升职自荐信
2013/11/28 职场文书
运动会通讯稿100字
2014/01/31 职场文书
小学入学感言
2015/08/01 职场文书
三好学生主要事迹材料
2015/11/03 职场文书