首页 > 编程 > JavaScript > 正文

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

2019-11-20 11:59:28
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表