1. 程式人生 > 其它 >js對Map的操作(可作為工具類)

js對Map的操作(可作為工具類)

function Map() {   
    /** 存放鍵的陣列(遍歷用到) */  
    this.keys = new Array();   
    /** 存放資料 */  
    this.data = new Object();   
    /**  
     * 放入一個鍵值對  
     * @param {String} key  
     * @param {Object} value  
     */  
    this.put = function(key, value) {   
        if(this.data[key] == null){   
            
this.keys.push(key); } this.data[key] = value; }; /** * 獲取某鍵對應的值 * @param {String} key * @return {Object} value */ this.get = function(key) { return this.data[key]; }; /** * 刪除一個鍵值對 * @param {String} key
*/ this.remove = function(key) { this.keys.remove(key); this.data[key] = null; }; /** * 遍歷Map,執行處理函式 * * @param {Function} 回撥函式 function(key,value,index){..} */ this.each = function(fn){ if(typeof fn != 'function'){
return; } var len = this.keys.length; for(var i=0;i<len;i++){ var k = this.keys[i]; fn(k,this.data[k],i); } }; /** * 獲取鍵值陣列(類似Java的entrySet()) * @return 鍵值物件{key,value}的陣列 */ this.entrys = function() { var len = this.keys.length; var entrys = new Array(len); for (var i = 0; i < len; i++) { entrys[i] = { key : this.keys[i], value : this.data[i] }; } return entrys; }; /** * 判斷Map是否為空 */ this.isEmpty = function() { return this.keys.length == 0; }; /** * 獲取鍵值對數量 */ this.size = function(){ return this.keys.length; }; /** * 重寫toString */ this.toString = function(){ var s = "{"; for(var i=0;i<this.keys.length;i++,s+=','){ var k = this.keys[i]; s += k+"="+this.data[k]; } s+="}"; return s; }; }
//測試效果
function testMap(){
var m = new Map(); m.put('key1','Comtop'); m.put('key2','測試2'); m.put('key3','測試3'); alert("init:"+m); m.put('key1','測試測試'); alert("set key1:"+m); m.remove("key2"); alert("remove key2: "+m); var s =""; m.each(function(key,value,index){ s += index+":"+ key+"="+value+"/n"; }); alert(s); }