javascript實現Map結構

//定義map    
function Map() {
    this.container = {};
}
//將key-value放入map中    
Map.prototype.put = function(key, value) {
    try {
        if (key != null){
            this.container[key] = value;
        }
    } catch (e) {
        return e;
    }
};

//根據key從map中取出對應的value    
Map.prototype.get = function(key,deft) {
    if(!this.containsKey(key)){
        return deft;
    }
    try {
        return this.container[key];
    } catch (e) {
        return e;
    }
};

//判斷map中是否包含指定的key    
Map.prototype.containsKey = function(key) {
    try {
        for ( var p in this.container) {
            if (p == key)
                return true;
        }
        return false;

    } catch (e) {
        return e;
    }

}

//判斷map中是否包含指定的value    
Map.prototype.containsValue = function(value) {
    try {
        for ( var p in this.container) {
            if (this.container[p] === value)
                return true;
        }
        return false;

    } catch (e) {
        return e;
    }
};

//刪除map中指定的key    
Map.prototype.remove = function(key) {
    try {
        delete this.container[key];
    } catch (e) {
        return e;
    }
};

//清空map    
Map.prototype.clear = function() {
    try {
        delete this.container;
        this.container = {};

    } catch (e) {
        return e;
    }
};

//判斷map是否爲空    
Map.prototype.isEmpty = function() {

    if (this.keySet().length == 0)
        return true;
    else
        return false;
};

//獲取map的大小    
Map.prototype.size = function() {

    return this.keySet().length;
}

//返回map中的key值數組    
Map.prototype.keySet = function() {
    var keys = new Array();
    for ( var p in this.container) {
        keys.push(p);
    }

    return keys;
}
//遍歷Map
Map.prototype.each = function(fun){
    var keys = this.keySet();
    for(var i = 0;i < keys.length;i++){
        fun(keys[i],this.get(keys[i]));
    }
}

//返回map中的values值數組    
Map.prototype.values = function() {
    var valuesArray = new Array();
    var keys = this.keySet();
    for (var i = 0; i < keys.length; i++) {
        valuesArray.push(this.container[keys[i]]);
    }
    return valuesArray;
}
//獲取Map的最大值,參數爲比較函數
Map.prototype.max = function(compare){
    var keys = this.keySet();
    var maxKey = keys[0],maxValue = this.get(keys[0]);
    for(var i = 0;i < keys.length;i++){
        if(compare(this.get(keys[i],maxValue))){
            maxValue = this.get(keys[i]);
            maxKey = keys[i];
        }
    }
    return [maxKey,maxValue];
}

//返回 map 中的 entrySet 對象
Map.prototype.entrySet = function() {
    var array = new Array();
    var keys = this.keySet();
    for (var i = 0; i < keys.length; i++) {
        array.push(keys[i],this.container[keys[i]]);
    }
    return array;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章