js中Map之基本用法

来源:互联网 发布:怎么把淘宝小号养到2心 编辑:程序博客网 时间:2024/06/02 04:12
[c-sharp] view plain copy
  1. Array.prototype.remove = function(s) {     
  2.     for (var i = 0; i < this.length; i++) {     
  3.         if (s == this[i])     
  4.             this.splice(i, 1);     
  5.     }     
  6. }     
  7.     
  8. /**   
  9.  * Simple Map   
  10.  *    
  11.  *    
  12.  * var m = new Map();   
  13.  * m.put('key','value');   
  14.  * ...   
  15.  * var s = "";   
  16.  * m.each(function(key,value,index){   
  17.  *      s += index+":"+ key+"="+value+"/n";   
  18.  * });   
  19.  * alert(s);   
  20.  *    
  21.  * @author dewitt   
  22.  * @date 2008-05-24   
  23.  */    
  24. function Map() {     
  25.     /** 存放键的数组(遍历用到) */    
  26.     this.keys = new Array();     
  27.     /** 存放数据 */    
  28.     this.data = new Object();     
  29.          
  30.     /**   
  31.      * 放入一个键值对   
  32.      * @param {String} key   
  33.      * @param {Object} value   
  34.      */    
  35.     this.put = function(key, value) {     
  36.         if(this.data[key] == null){     
  37.             this.keys.push(key);     
  38.         }     
  39.         this.data[key] = value;     
  40.     };     
  41.          
  42.     /**   
  43.      * 获取某键对应的值   
  44.      * @param {String} key   
  45.      * @return {Object} value   
  46.      */    
  47.     this.get = function(key) {     
  48.         return this.data[key];     
  49.     };     
  50.          
  51.     /**   
  52.      * 删除一个键值对   
  53.      * @param {String} key   
  54.      */    
  55.     this.remove = function(key) {     
  56.         this.keys.remove(key);     
  57.         this.data[key] = null;     
  58.     };     
  59.          
  60.     /**   
  61.      * 遍历Map,执行处理函数   
  62.      *    
  63.      * @param {Function} 回调函数 function(key,value,index){..}   
  64.      */    
  65.     this.each = function(fn){     
  66.         if(typeof fn != 'function'){     
  67.             return;     
  68.         }     
  69.         var len = this.keys.length;     
  70.         for(var i=0;i<len;i++){     
  71.             var k = this.keys[i];     
  72.             fn(k,this.data[k],i);     
  73.         }     
  74.     };     
  75.          
  76.     /**   
  77.      * 获取键值数组(类似Java的entrySet())   
  78.      * @return 键值对象{key,value}的数组   
  79.      */    
  80.     this.entrys = function() {     
  81.         var len = this.keys.length;     
  82.         var entrys = new Array(len);     
  83.         for (var i = 0; i < len; i++) {     
  84.             entrys[i] = {     
  85.                 key : this.keys[i],     
  86.                 value : this.data[i]     
  87.             };     
  88.         }     
  89.         return entrys;     
  90.     };     
  91.          
  92.     /**   
  93.      * 判断Map是否为空   
  94.      */    
  95.     this.isEmpty = function() {     
  96.         return this.keys.length == 0;     
  97.     };     
  98.          
  99.     /**   
  100.      * 获取键值对数量   
  101.      */    
  102.     this.size = function(){     
  103.         return this.keys.length;     
  104.     };     
  105.          
  106.     /**   
  107.      * 重写toString    
  108.      */    
  109.     this.toString = function(){     
  110.         var s = "{";     
  111.         for(var i=0;i<this.keys.length;i++,s+=','){     
  112.             var k = this.keys[i];     
  113.             s += k+"="+this.data[k];     
  114.         }     
  115.         s+="}";     
  116.         return s;     
  117.     };     
  118. }     
  119.     
  120.     
  121. function testMap(){     
  122.     var m = new Map();     
  123.     m.put('key1','Comtop');     
  124.     m.put('key2','南方电网');     
  125.     m.put('key3','景新花园');     
  126.     alert("init:"+m);     
  127.          
  128.     m.put('key1','康拓普');     
  129.     alert("set key1:"+m);     
  130.          
  131.     m.remove("key2");     
  132.     alert("remove key2: "+m);     
  133.          
  134.     var s ="";     
  135.     m.each(function(key,value,index){     
  136.         s += index+":"+ key+"="+value+"/n";     
  137.     });     
  138.     alert(s);     
  139. }    

html代码:

 

[c-sharp] view plain copy
  1. <html>    
  2. <head>    
  3. <title>Test Map</title>    
  4. <mce:script language="javascript" src="map.js" mce_src="map.js"><!--  
  5.     
  6. // --></mce:script>    
  7. </head>    
  8. <body>    
  9. <input type="button" value="test" onclick="testMap()">    
  10. </body>    
  11. </html>