JavaScript中利用Array和Object实现Map的方法
本文实例讲述了JavaScript中利用Array和Object实现Map的方法。分享给大家供大家参考。具体如下:
昨天突然看到以前别人用JavaScript实现的Map感觉很不错,但是发现有个别方法有问题,顺便完善了下,添加了remove、indexOf、values、clear等方法。
/**
*@authorblune68
*@version0.1,07/27/12
*
*/
functionMap(){
this.keys=newArray();
this.data=newObject();
vartoString=Object.prototype.toString;
/**
*当前Map当前长度
*/
this.size=function(){
returnthis.keys.length;
}
/**
*添加值
*@param{Object}key
*@param{Object}value
*/
this.put=function(key,value){
if(this.data[key]==null){
this.data[key]=value;
}
this.keys.push(key);
}
/**
*根据当前key获取value
*@param{Object}key
*/
this.get=function(key){
returnthis.data[key];
}
/**
*根据当前key移除Map对应值
*@param{Object}key
*/
this.remove=function(key){
varindex=this.indexOf(key);
if(index!=-1){
this.keys.splice(index,1);
}
this.data[key]=null;
}
/**
*清空Map
*/
this.clear=function(){
for(vari=0,len=this.size();i<len;i++){
varkey=this.keys[i];
this.data[key]=null;
}
this.keys.length=0;
}
/**
*当前key是否存在
*@param{Object}key
*/
this.containsKey=function(key){
returnthis.data[key]!=null;
}
/**
*是否为空
*/
this.isEmpty=function(){
returnthis.keys.length===0;
}
/**
*类型Java中Map.entrySet
*/
this.entrySet=function(){
varsize=this.size();
vardatas=newArray(size);
for(vari=0,len=size;i<len;i++){
varkey=this.keys[i];
varvalue=this.data[key];
datas[i]={
'key':key,
'value':value
}
}
returndatas;
}
/**
*遍历当前Map
*varmap=newMap();
*map.put('key','value');
*map.each(function(index,key,value){
*console.log("index:"+index+"--key:"+key+"--value:"+value)
*})
*@param{Object}fn
*/
this.each=function(fn){
if(toString.call(fn)==='[objectFunction]'){
for(vari=0,len=this.size();i<len;i++){
varkey=this.keys[i];
fn(i,key,this.data[key]);
}
}
returnnull;
}
/**
*获取Map中当前key索引值
*@param{Object}key
*/
this.indexOf=function(key){
varsize=this.size();
if(size>0){
for(vari=0,len=size;i<len;i++){
if(this.keys[i]==key)
returni;
}
}
return-1;
}
/**
*OverridetoString
*/
this.toString=function(){
varstr="{";
for(vari=0,len=this.size();i<len;i++,str+=","){
varkey=this.keys[i];
varvalue=this.data[key];
str+=key+"="+value;
}
str=str.substring(0,str.length-1);
str+="}";
returnstr;
}
/**
*获取Map中的所有value值(Array)
*/
this.values=function(){
varsize=this.size();
varvalues=newArray();
for(vari=0;i<size;i++){
varkey=this.keys[i];
values.push(this.data[key]);
}
returnvalues;
}
}
希望本文所述对大家的javascript程序设计有所帮助。