最近在学习js的知识时,遇到一个问题,用js来模拟java代码中的Map实现,看到别人实现了其中的put和get方法,于是决定在这个基础上继续实现一些通用的方法,下面贴出代码,基础有限,如果有更好的实现方式,欢迎一起讨论。
/**
* 模拟Map键值对
* author pk
*/
function Map(){
var obj = {};
//clear清空map
this.clear = function(){
for(key in obj){
if(obj.hasOwnProperty(key)){
delete obj[key];
}
}
};
//往map里存放键值对
this.put = function(key, val){
obj[key] = val;
};
//返回map键值对的个数
this.size = function(){
var count = 0;
for(key in obj){
if(obj.hasOwnProperty(key)){
count++;
}
}
return count;
};
//判断map是否为空
this.isEmpty = function(){
return this.size === 0;
};
//判断是否含有某个key
this.containsKey = function(key){
return obj[key] !== undefined;
};
//判断是否含有某个value
this.containsValue = function(val){
for(key in obj){
if(obj.hasOwnProperty(key)){
if(obj[key] === val){
return true;
}
}
}
return false;
};
//获取指定key对应的value
this.get = function(key){
//如果key不存在,则返回null
if(obj[key] === undefined){
return null;
}
return obj[key];
};
//删除指定key对应的键值对,并返回其val
this.remove = function(key){
var temp = undefined;
temp = this.get(key);
delete obj[key];
return temp;
};
//返回map的键值集合
this.keys = function(){
var temp = [];
for(key in obj){
if(obj.hasOwnProperty(key)){
temp.push(key);
}
}
return temp;
};
//打印map
this.toString = function(){
var keyArr = this.keys();
if(keyArr.length === 0){
return '{}';
}else{
var str = '{';
keyArr.forEach(function(item, index, arr){
if(index < arr.length - 1){
str += item + '=' + obj[item] + ',';
}else{
str += item + '=' + obj[item];
}
})
str += '}';
return str;
}
};
}