1. 程式人生 > >ES6之前模擬Map數據結構的寫法

ES6之前模擬Map數據結構的寫法

tro write push map ava 是否為空 span asc 接口

在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>

ES6之前模擬Map數據結構的寫法