js中的hashmap实现

javascript原生的map特性: 
Js代码   收藏代码
  1. var myMap = {};  
  2. myMap['key1'] = {name:'amhuman',blog:'http://am-human.iteye.com/'};  
  3. alert(myMap['key1']);  


但是功能不够强大,网上有很多js的hashmap实现,抄了一个个人认为比较实用的: 
Js代码   收藏代码
  1. /** 
  2. *作者 :Fantasy 
  3. *Email: [email protected] 
  4. *QQ   : 8635335 
  5. *Blog : http://www.blogjava.net/fantasy 
  6. *版本 :V1.1  
  7. */  
  8. function HashMap()  
  9. {  
  10.     /** Map 大小 **/  
  11.     var size = 0;  
  12.     /** 对象 **/  
  13.     var entry = new Object();  
  14.       
  15.     /** 存 **/  
  16.     this.put = function (key , value)  
  17.     {  
  18.         if(!this.containsKey(key))  
  19.         {  
  20.             size ++ ;  
  21.         }  
  22.         entry[key] = value;  
  23.     }  
  24.       
  25.     /** 取 **/  
  26.     this.get = function (key)  
  27.     {  
  28.         return this.containsKey(key) ? entry[key] : null;  
  29.     }  
  30.       
  31.     /** 删除 **/  
  32.     this.remove = function ( key )  
  33.     {  
  34.         ifthis.containsKey(key) && ( delete entry[key] ) )  
  35.         {  
  36.             size --;  
  37.         }  
  38.     }  
  39.       
  40.     /** 是否包含 Key **/  
  41.     this.containsKey = function ( key )  
  42.     {  
  43.         return (key in entry);  
  44.     }  
  45.       
  46.     /** 是否包含 Value **/  
  47.     this.containsValue = function ( value )  
  48.     {  
  49.         for(var prop in entry)  
  50.         {  
  51.             if(entry[prop] == value)  
  52.             {  
  53.                 return true;  
  54.             }  
  55.         }  
  56.         return false;  
  57.     }  
  58.       
  59.     /** 所有 Value **/  
  60.     this.values = function ()  
  61.     {  
  62.         var values = new Array();  
  63.         for(var prop in entry)  
  64.         {  
  65.             values.push(entry[prop]);  
  66.         }  
  67.         return values;  
  68.     }  
  69.       
  70.     /** 所有 Key **/  
  71.     this.keys = function ()  
  72.     {  
  73.         var keys = new Array();  
  74.         for(var prop in entry)  
  75.         {  
  76.             keys.push(prop);  
  77.         }  
  78.         return keys;  
  79.     }  
  80.       
  81.     /** Map Size **/  
  82.     this.size = function ()  
  83.     {  
  84.         return size;  
  85.     }  
  86.       
  87.     /* 清空 */  
  88.     this.clear = function ()  
  89.     {  
  90.         size = 0;  
  91.         entry = new Object();  
  92.     }  
  93. }  
  94.   
  95. var map = new HashMap();  
  96.   
  97. /* 
  98. map.put("A","1"); 
  99. map.put("B","2"); 
  100. map.put("A","5"); 
  101. map.put("C","3"); 
  102. map.put("A","4"); 
  103. */  
  104.   
  105. /* 
  106. alert(map.containsKey("XX")); 
  107. alert(map.size()); 
  108. alert(map.get("A")); 
  109. alert(map.get("XX")); 
  110. map.remove("A"); 
  111. alert(map.size()); 
  112. alert(map.get("A")); 
  113. */  
  114.   
  115. /** 同时也可以把对象作为 Key **/  
  116. /* 
  117. var arrayKey = new Array("1","2","3","4"); 
  118. var arrayValue = new Array("A","B","C","D"); 
  119. map.put(arrayKey,arrayValue); 
  120. var value = map.get(arrayKey); 
  121. for(var i = 0 ; i < value.length ; i++) 
  122. { 
  123.     //alert(value[i]); 
  124. } 
  125. */  
  126. /** 把对象做为Key时 ,自动调用了该对象的 toString() 方法 其实最终还是以String对象为Key**/  
  127.   
  128. /** 如果是自定义对象 那自己得重写 toString() 方法 否则 . 就是下面的结果 **/  
  129.   
  130. function MyObject(name)  
  131. {  
  132.     this.name = name;  
  133. }  
  134.   
  135. /** 
  136. function MyObject(name) 
  137. { 
  138.     this.name = name; 
  139.      
  140.     this.toString = function () 
  141.     { 
  142.         return this.name; 
  143.     } 
  144. } 
  145. **/  
  146. var object1 = new MyObject("小张");  
  147. var object2 = new MyObject("小名");  
  148.   
  149. map.put(object1,"小张");  
  150. map.put(object2,"小名");  
  151. alert(map.get(object1));  
  152. alert(map.get(object2));  
  153. map.remove("xxxxx");  
  154. alert(map.size());  
  155.   
  156. /** 运行结果 小名 小名 size = 1 **/  
  157.   
  158. /** 如果改成复写toString()方法的对象 , 效果就完全不一样了 **/  

你可能感兴趣的:(js中的hashmap实现)