JavaScript中利用Array和Object实现Map的方法


Posted in Javascript onJuly 27, 2015

本文实例讲述了JavaScript中利用Array和Object实现Map的方法。分享给大家供大家参考。具体如下:

昨天突然看到以前别人用JavaScript实现的Map感觉很不错,但是发现有个别方法有问题,顺便完善了下,添加了 remove 、indexOf 、values、clear等方法。

/**
 * @author blune68
 * @version 0.1, 07/27/12
 * 
 */
function Map(){
  this.keys = new Array(); 
  this.data = new Object();
  var toString = Object.prototype.toString;
  /**
   * 当前Map当前长度
   */
  this.size = function(){
    return this.keys.length;
  }
  /**
   * 添加值
   * @param {Object} key
   * @param {Object} value
   */
  this.put = function(key, value){
    if(this.data[key] == null){
      this.data[key] = value;
    }
    this.keys.push(key);
  }
  /**
   * 根据当前key获取value
   * @param {Object} key
   */
  this.get = function(key){
    return this.data[key];
  }
  /**
   * 根据当前key移除Map对应值
   * @param {Object} key
   */
  this.remove = function(key){
    var index = this.indexOf(key);
    if(index != -1){
      this.keys.splice(index, 1);
    }
    this.data[key] = null;
  }
  /**
   * 清空Map
   */
  this.clear = function(){
    for(var i=0, len = this.size(); i < len; i++){
      var key = this.keys[i];
      this.data[key] = null;
    }
    this.keys.length = 0;
  }
  /**
   * 当前key是否存在
   * @param {Object} key
   */
  this.containsKey = function(key){
    return this.data[key] != null;
  }
  /**
   * 是否为空
   */
  this.isEmpty = function(){
    return this.keys.length === 0;
  }
  /**
   * 类型Java中Map.entrySet
   */
  this.entrySet = function(){
    var size = this.size();
    var datas = new Array(size);
    for (var i = 0, len = size; i < len; i++) {
      var key = this.keys[i];
      var value = this.data[key];
      datas[i] = {
        'key' : key,
        'value':value  
      }
    }
    return datas;
  }
  /**
   * 遍历当前Map
   * var map = new Map();
   * map.put('key', 'value');
   * map.each(function(index, key, value){
   *   console.log("index:" + index + "--key:" + key + "--value:" + value)
   * })
   * @param {Object} fn
   */
  this.each = function(fn){
    if(toString.call(fn) === '[object Function]'){
      for (var i = 0, len = this.size(); i < len; i++) {
        var key = this.keys[i];
        fn(i, key, this.data[key]);
      }
    }
    return null;
  }
  /**
   * 获取Map中 当前key 索引值
   * @param {Object} key
   */
  this.indexOf = function(key){
    var size = this.size();
    if(size > 0){
      for(var i=0, len=size; i < len; i++){
        if(this.keys[i] == key)
        return i;
      }
    }
    return -1;
  }
  /**
   * Override toString
   */
  this.toString = function(){
    var str = "{";
    for (var i = 0, len = this.size(); i < len; i++, str+=",") {
      var key = this.keys[i];
      var value = this.data[key];
      str += key + "=" + value; 
    }
    str = str.substring(0, str.length-1);
    str += "}";
    return str;
  }
  /**
   * 获取Map中的所有value值(Array)
   */
  this.values = function(){
    var size = this.size();
    var values = new Array();
    for(var i = 0; i < size; i++){
      var key = this.keys[i];
      values.push(this.data[key]);
    }
    return values;
  }
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
jQuery1.6 类型判断实现代码
Sep 01 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
jQuery Dialog对话框事件用法实例分析
May 10 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 jQuery
jQuery dateRangePicker插件使用方法详解
Jul 28 jQuery
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
node实现定时发送邮件的示例代码
Aug 26 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
vue实现随机验证码功能的实例代码
Apr 30 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 #Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 #Javascript
JavaScript判断IE版本型号
Jul 27 #Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 #Javascript
readonly和disabled属性的区别
Jul 26 #Javascript
javascript实现继承的简单实例
Jul 26 #Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 #Javascript
You might like
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PDO::prepare讲解
2019/01/29 PHP
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
js简单抽奖代码
2015/01/16 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
进一步探究Python的装饰器的运用
2015/05/05 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
pytorch构建多模型实例
2020/01/15 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
python中JWT用户认证的实现
2020/05/18 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python中sys模块是做什么用的
2020/08/16 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
银行实习的自我鉴定
2013/12/10 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
工作推荐信模板
2015/03/25 职场文书
工作会议通知
2015/04/15 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书