js 中的map

Array.prototype.remove = function(s) {
for (var i = 0; i < this.length; i++) {
if (s == this[i])
this.splice(i, 1);
}
}

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) {
if (this.data[key] == null && this.data['Error.default'] != null){
return this.data['Error.default'] }else{
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;
};
}
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 928
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章