一个简单的JavaScript Map实例(分享)

前端之家收集整理的这篇文章主要介绍了一个简单的JavaScript Map实例(分享)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用js写了一个Map,带遍历功能,请大家点评下啦。

/**

  • 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,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,index){
s += index+":"+ key+"="+value+"\n";
});
alert(s);
}
  //testMap.htm

?

Test Map

猜你在找的JavaScript相关文章