
java
-
个人空间
- 组别:版主
- 性别:
- 来自:
- 积分:107
- 帖子:100
- 注册:
2008-04-14
|
一个简单的JavaScript Map
用js写了一个Map,带遍历功能,请大家点评下啦。 //map.js Js代码 1. Array.prototype.remove = function(s) { 2. for (var i = 0; i < this.length; i++) { 3. if (s == this ) 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; 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 = { 85. key : this.keys, 86. value : this.data 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; 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. }
Array.prototype.remove = function(s) { for (var i = 0; i < this.length; i++) { if (s == this) this.splice(i, 1); } }
/** * 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; 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 = { key : this.keys, value : this.data }; } 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; 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); }
//testMap.htm Html代码
1. <html> 2. <head> 3. <title>Test Map</title> 4. <script language="javascript" src="map.js"> 5. </script> 6. </head> 7. <body> 8. <input type="button" value="test" > 9. </body> 10. </html>
<html> <head> <title>Test Map</title> <script language="javascript" src="map.js"> </script> </head> <body> <input type="button" value="test" > </body> </html>
下载 (1.2 KB)
 java 最后编辑于 2008-06-17 14:42:30
|