用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)