1 /*
2 * MAP对象,实现MAP功能
3 *
4 * 接口:
5 * size() 获取MAP元素个数
6 * isEmpty() 判断MAP是否为空
7 * clear() 删除MAP所有元素
8 * put(key, value) 向MAP中增加元素(key, value)
9 * remove(key) 删除指定KEY的元素,成功返回True,失败返回False
10 * get(key) 获取指定KEY的元素值VALUE,失败返回NULL
11 * element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
12 * containsKey(key) 判断MAP中是否含有指定KEY的元素
13 * containsValue(value) 判断MAP中是否含有指定VALUE的元素
14 * values() 获取MAP中所有VALUE的数组(ARRAY)
15 * keys() 获取MAP中所有KEY的数组(ARRAY)
16 *
17 * 例子:
18 * var map = new Map();
19 *
20 * map.put("key", "value");
21 * var val = map.get("key")
22 * ……
23 *
24 */
25 function Map() {
26 this.elements = new Array();
27
28 //获取MAP元素个数
29 this.size = function() {
30 return this.elements.length;
31 };
32
33 //判断MAP是否为空
34 this.isEmpty = function() {
35 return (this.elements.length < 1);
36 };
37
38 //删除MAP所有元素
39 this.clear = function() {
40 this.elements = new Array();
41 };
42
43 //向MAP中增加元素(key, value)
44 this.put = function(_key, _value) {
45 this.elements.push( {
46 key : _key,
47 value : _value
48 });
49 };
50
51 //删除指定KEY的元素,成功返回True,失败返回False
52 this.removeByKey = function(_key) {
53 var bln = false;
54 try {
55 for (i = 0; i < this.elements.length; i++) {
56 if (this.elements[i].key == _key) {
57 this.elements.splice(i, 1);
58 return true;
59 }
60 }
61 } catch (e) {
62 bln = false;
63 }
64 return bln;
65 };
66
67 //删除指定VALUE的元素,成功返回True,失败返回False
68 this.removeByValue = function(_value) {//removeByValueAndKey
69 var bln = false;
70 try {
71 for (i = 0; i < this.elements.length; i++) {
72 if (this.elements[i].value == _value) {
73 this.elements.splice(i, 1);
74 return true;
75 }
76 }
77 } catch (e) {
78 bln = false;
79 }
80 return bln;
81 };
82
83 //删除指定VALUE的元素,成功返回True,失败返回False
84 this.removeByValueAndKey = function(_key,_value) {
85 var bln = false;
86 try {
87 for (i = 0; i < this.elements.length; i++) {
88 if (this.elements[i].value == _value && this.elements[i].key == _key) {
89 this.elements.splice(i, 1);
90 return true;
91 }
92 }
93 } catch (e) {
94 bln = false;
95 }
96 return bln;
97 };
98
99 //获取指定KEY的元素值VALUE,失败返回NULL
100 this.get = function(_key) {
101 try {
102 for (i = 0; i < this.elements.length; i++) {
103 if (this.elements[i].key == _key) {
104 return this.elements[i].value;
105 }
106 }
107 } catch (e) {
108 return false;
109 }
110 return false;
111 };
112
113 //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
114 this.element = function(_index) {
115 if (_index < 0 || _index >= this.elements.length) {
116 return null;
117 }
118 return this.elements[_index];
119 };
120
121 //判断MAP中是否含有指定KEY的元素
122 this.containsKey = function(_key) {
123 var bln = false;
124 try {
125 for (i = 0; i < this.elements.length; i++) {
126 if (this.elements[i].key == _key) {
127 bln = true;
128 }
129 }
130 } catch (e) {
131 bln = false;
132 }
133 return bln;
134 };
135
136 //判断MAP中是否含有指定VALUE的元素
137 this.containsValue = function(_value) {
138 var bln = false;
139 try {
140 for (i = 0; i < this.elements.length; i++) {
141 if (this.elements[i].value == _value) {
142 bln = true;
143 }
144 }
145 } catch (e) {
146 bln = false;
147 }
148 return bln;
149 };
150
151 //判断MAP中是否含有指定VALUE的元素
152 this.containsObj = function(_key,_value) {
153 var bln = false;
154 try {
155 for (i = 0; i < this.elements.length; i++) {
156 if (this.elements[i].value == _value && this.elements[i].key == _key) {
157 bln = true;
158 }
159 }
160 } catch (e) {
161 bln = false;
162 }
163 return bln;
164 };
165
166 //获取MAP中所有VALUE的数组(ARRAY)
167 this.values = function() {
168 var arr = new Array();
169 for (i = 0; i < this.elements.length; i++) {
170 arr.push(this.elements[i].value);
171 }
172 return arr;
173 };
174
175 //获取MAP中所有VALUE的数组(ARRAY)
176 this.valuesByKey = function(_key) {
177 var arr = new Array();
178 for (i = 0; i < this.elements.length; i++) {
179 if (this.elements[i].key == _key) {
180 arr.push(this.elements[i].value);
181 }
182 }
183 return arr;
184 };
185
186 //获取MAP中所有KEY的数组(ARRAY)
187 this.keys = function() {
188 var arr = new Array();
189 for (i = 0; i < this.elements.length; i++) {
190 arr.push(this.elements[i].key);
191 }
192 return arr;
193 };
194
195 //获取key通过value
196 this.keysByValue = function(_value) {
197 var arr = new Array();
198 for (i = 0; i < this.elements.length; i++) {
199 if(_value == this.elements[i].value){
200 arr.push(this.elements[i].key);
201 }
202 }
203 return arr;
204 };
205
206 //获取MAP中所有KEY的数组(ARRAY)
207 this.keysRemoveDuplicate = function() {
208 var arr = new Array();
209 for (i = 0; i < this.elements.length; i++) {
210 var flag = true;
211 for(var j=0;j<arr.length;j++){
212 if(arr[j] == this.elements[i].key){
213 flag = false;
214 break;
215 }
216 }
217 if(flag){
218 arr.push(this.elements[i].key);
219 }
220 }
221 return arr;
222 };
223 }