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 hashmap() { 26 /** 27 * 存放數據 28 */ 29 this.data = new Object(); 30 31 /** 32 * 放入一個鍵值對 33 * @param {String} key 34 * @param {Object} value 35 */ 36 this.put = function(key, value) 37 { 38 this.data[key] = value; 39 }; 40 41 /** 42 * 獲取某鍵對應的值 43 * @param {String} key 44 * @return {Object} value 45 */ 46 this.get = function(key) 47 { 48 return this.containsKey(key)?this.data[key]:null; 49 }; 50 51 /** 52 * 刪除一個鍵值對 53 * @param {String} key 54 */ 55 this.remove = function(key) 56 { 57 delete this.data[key]; 58 }; 59 60 /** 61 * 遍歷Map,執行處理函數 62 * 63 * @param {Function} 回調函數 function(key,value,index){..} 64 */ 65 this.each = function(fn){ 66 if(typeof fn != 'function') 67 { 68 return; 69 } 70 var len = this.data.length; 71 for(var i=0;i<len;i++) 72 { 73 var k = this.data[i]; 74 fn(k,this.data[k],i); 75 } 76 }; 77 78 /** 79 * 獲取鍵值數組(類似Java的entrySet()) 80 * @return 鍵值對象{key,value}的數組 81 */ 82 this.entrys = function() 83 { 84 var len = this.data.length; 85 var entrys = new Array(len); 86 for (var i = 0; i < len; i++) { 87 entrys[i] = { 88 key : i, 89 value : this.data[i] 90 }; 91 } 92 return entrys; 93 }; 94 95 /** 96 * 判斷Map是否為空 97 */ 98 this.isEmpty = function() 99 { 100 return this.data.length == 0; 101 }; 102 103 /** 104 * 獲取鍵值對數量 105 */ 106 this.size = function() 107 { 108 return this.data.length; 109 }; 110 111 /** 112 * 重寫toString ,裝成JSON格式 113 */ 114 this.toString = function() 115 { 116 var s = "["; 117 for(var i=0;i<this.data.length;i++,s+=','){ 118 var k = this.data[i]; 119 s += "{'id':'" + k+"','value':'"+this.data[k]+"'}"; 120 } 121 s=s.substring(0, s.length-1); 122 if(s!=""){ 123 s+="]"; 124 } 125 return s; 126 }; 127 128 /** 129 * 輸出Value的值 130 */ 131 this.values = function (){ 132 var _values= new Array(); 133 for(var key in this.data) 134 { 135 _values.push(this.data[key]); 136 } 137 return _values; 138 }; 139 140 /** 141 * 獲取keys 142 */ 143 this.keySet = function (){ 144 var _keys = new Array(); 145 for(var key in this.data) 146 { 147 _keys.push(key); 148 } 149 return _keys; 150 }; 151 152 /** 153 * 判斷MAP中是否含有指定KEY的元素 154 */ 155 this.containsKey = function(_key) 156 { 157 return (_key in this.data); 158 }; 159 160 /** 161 * 清空Map 162 */ 163 this.clear = function(){ 164 this.data.length = 0; 165 this.data = new Object(); 166 }; 167 }