js 实现map功能

来源:互联网 发布:php app 用户注册源码 编辑:程序博客网 时间:2024/06/04 19:37
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> New Document </title>  <meta name="Generator" content="EditPlus">  <meta name="Author" content="">  <meta name="Keywords" content="">  <meta name="Description" content=""> </head> <body>  <input type="button" value="test" onclick="testMap()">  </body></html><script>Array.prototype.remove = function(s) {       for (var i = 0; i < this.length; i++) {           if (s == this[i]){               this.splice(i, 1);            break;        }    }   }   /**   * 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);   }  </script>
0 0