导航

JS-Map

Posted on 2018-03-10 17:30  小飞博客  阅读(478)  评论(0编辑  收藏  举报
  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 }