ES6之前模擬Map數據結構的寫法
阿新 • • 發佈:2018-09-12
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數據結構的寫法