ES6之前模拟Map数据结构的写法

在ES6之前JavaScript 里面本身没有map对象,但是用JavaScript的Array、Object来模拟实现Map的数据结构。

现在已经有Map对象了,这里记录一下之前的写法

Array方法

  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.remove = 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     //获取指定KEY的元素值VALUE,失败返回NULL   
 68     this.get = function(_key) {   
 69         try{   
 70             for(i = 0; i < this.elements.length; i++) {   
 71                 if(this.elements[i].key == _key) {   
 72                     return this.elements[i].value;   
 73                 }   
 74             }   
 75         } catch(e) {   
 76             return null;   
 77         }   
 78     }   
 79      
 80     //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL   
 81     this.element = function(_index) {   
 82         if(_index < 0 || _index >= this.elements.length) {   
 83             return null;   
 84         }   
 85         return this.elements[_index];   
 86     }   
 87      
 88     //判断MAP中是否含有指定KEY的元素   
 89     this.containsKey = function(_key) {   
 90         varbln = false;   
 91         try{   
 92             for(i = 0; i < this.elements.length; i++) {   
 93                 if(this.elements[i].key == _key) {   
 94                     bln = true;   
 95                 }   
 96             }   
 97         } catch(e) {   
 98             bln = false;   
 99         }   
100         return bln;   
101     }   
102      
103     //判断MAP中是否含有指定VALUE的元素   
104     this.containsValue = function(_value) {   
105         var bln = false;   
106         try{   
107             for(i = 0; i < this.elements.length; i++) {   
108                 if(this.elements[i].value == _value) {   
109                     bln = true;   
110                 }   
111             }   
112         } catch(e) {   
113             bln = false;   
114         }   
115         return bln;   
116     }   
117      
118     //获取MAP中所有VALUE的数组(ARRAY)   
119     this.values = function() {   
120         var arr = new Array();   
121         for(i = 0; i < this.elements.length; i++) {   
122             arr.push(this.elements[i].value);   
123         }   
124         return arr;   
125     }   
126      
127     //获取MAP中所有KEY的数组(ARRAY)   
128     this.keys = function() {   
129         var arr = new Array();   
130         for(i = 0; i < this.elements.length; i++) {   
131             arr.push(this.elements[i].key);   
132         }   
133         return arr;   
134     }   
135 }   
136  
137   var map = new Map();  
138    
139   map.put("key1", "value1");  
140   map.put("key2", "value2");  
141   map.put("key3", "value3");  
142  
143   
144   //var val = map.get("key1");
145 //    var val = map.containsKey("key1");
146 //    var val = map.element(2).value;
147  
148     var arr=map.keys();
149     for(var i=0;i<arr.length;i++){
150         alert(map.get(arr[i]));
151     }
152 //  alert(val);

Object方法

 1 <script type=text/javascript charset=utf-8>
 2             /***************模拟java里的map集合***************/
 3             function Map(){
 4                 var obj = {};//空对象,存放键值对
 5 
 6                 //put方法,存值
 7                 this.put = function(key,value){
 8                     obj[key] = value;
 9                 }
10 
11                 //size方法,返回大小
12                 this.size = function(){
13                     var count = 0;
14                     for(var att in obj){
15                         count++;
16                     }
17                     return count;
18                 }
19 
20                 //get方法,根据key获得value
21                 this.get = function(key){
22                     if(obj[key] || obj[key] === 0 || obj[key] === false){
23                         return obj[key];
24                     }else{
25                         return null;
26                     }
27                 }
28 
29                 //删除方法,根据key删除
30                 this.remove = function(key){
31                     if (obj[key] || obj[key] === 0 || obj[key] === false) {
32                         delete obj[key];
33                     }
34                 }   
35 
36                 //遍历map
37                 this.each = function(fn){
38                     for(var att in obj){
39                         fn(att,obj[att]);
40                     }
41                 }
42             }
43 
44             var m = new Map();
45             m.put('001','BeiJing');
46             m.put('002','ShangHai');
47             //document.write(m.size());
48             //m.remove('001');
49             //alert(m.get('001'));
50             m.each(function(key,value){
51                 alert(key + ':' + value);
52             });
53 
54         </script>

 

posted @ 2018-09-11 23:25  笠航  阅读(397)  评论(0编辑  收藏  举报