1 <script> 2 function HashMap(){this.map = {};} 3 HashMap.prototype = { 4 put : function(key, value){ this.map[key] = value;}, 5 get : function(key){ 6 if(this.map.hasOwnProperty(key)){ return this.map[key];} 7 return null; 8 }, 9 remove : function(key){ 10 if(this.map.hasOwnProperty(key)){ return delete this.map[key];} 11 return false; 12 }, 13 removeAll : function(){this.map = {};}, 14 keySet : function(){ 15 var _keys = []; 16 for(var i in this.map){ 17 _keys.push(i); 18 } 19 return _keys; 20 } 21 }; 22 23 HashMap.prototype.constructor = HashMap; 24 25 //排序方法 26 function compare(val1,val2) { 27 // 轉換為拼音 28 //val1 = Pinyin.getFullChars(val1).toLowerCase(); 29 //val2 = Pinyin.getFullChars(val2).toLowerCase(); 30 31 // 獲取較長的拼音的長度 32 var length = val1.length > val2.length ? val1.length:val2.length; 33 34 // 依次比較字母的unicode碼,相等時返回0,小於時返回-1,大於時返回1 35 for(var i = 0; i < length; i++ ){ 36 var tmp_val1 = isNaN(val1.charCodeAt(i)) ? 0:val1.charCodeAt(i); 37 var tmp_val2 = isNaN(val2.charCodeAt(i)) ? 0:val2.charCodeAt(i); 38 var differ = tmp_val1 - tmp_val2; 39 //console.log(tmp_val1+" "+tmp_val2); 40 //console.log(differ); 41 if(differ == 0) { 42 continue; 43 }else { 44 //if(val1.charAt(i) == '_' ) { 45 //return -1; 46 //} 47 return differ; 48 } 49 } 50 //if(i == length) { 51 // return val1.length - val2.length; 52 //} 53 } 54 //init map 55 var hashMap = new HashMap(); 56 //add value 57 hashMap.put('key111' ,'value1'); 58 hashMap.put('key3' ,'value3'); 59 hashMap.put('key' ,'value2'); 60 hashMap.put('aa' ,'value2'); 61 hashMap.put('bbbbbb' ,'value2'); 62 63 var hash_keyset = hashMap.keySet(); 64 for(var i=0; i<hash_keyset.length; i++){ 65 66 var key = hash_keyset.sort(compare)[i];//key排序 67 //var key = hash_keyset[i];//不排序 68 //alert(key+" "+hashMap.get(key)); 69 console.log(key+" "+hashMap.get(key)); 70 71 } 72 </script>