JavaScript中实现Map的示例代码
不废话了,直接贴代码了。
代码一:
varmap=newMap();
map.put("a","A");map.put("b","B");map.put("c","C");
map.get("a");//返回:A
map.entrySet()//返回Entity[{key,value},{key,value}]
map.containsKey('kevin')//返回:false
functionMap(){
this.keys=newArray();
this.data=newObject();
/**
*放入一个键值对
*@param{String}key
*@param{Object}value
*/
this.put=function(key,value){
if(this.data[key]==null){
this.keys.push(key);
this.data[key]=value;
}else{
this.data[key]=this.data[key];
}
returntrue;
};
/**
*获取某键对应的值
*@param{String}key
*@return{Object}value
*/
this.get=function(key){
returnthis.data[key];
};
/**
*删除一个键值对
*@param{String}key
*/
this.remove=function(key){
for(vari=0;i<this.keys.length;i++){
if(key===this.keys[i]){
vardel_keys=this.keys.splice(i,1);
for(kindel_keys){
this.data[k]=null;
}
returntrue;
}
}
returnfalse;
};
/**
*遍历Map,执行处理函数
*
*@param{Function}回调函数function(key,value,index){..}
*/
this.each=function(fn){
if(typeoffn!='function'){
return;
}
varlen=this.keys.length;
for(vari=0;i<len;i++){
vark=this.keys[i];
fn(k,this.data[k],i);
}
};
/**
*获取键值数组
*@returnentity[{key,value},{key,value}]
*/
this.entrySet=function(){
varlen=this.keys.length;
varentrys=newArray(len);
for(vari=0;i<len;i++){
entrys[i]={
key:this.keys[i],
value:this.data[this.keys[i]]
};
}
returnentrys;
};
/**
*判断Map是否为空
*/
this.isEmpty=function(){
returnthis.keys.length==0;
};
/**
*获取键值对数量
*/
this.size=function(){
returnthis.keys.length;
};
this.containsKey=function(key){
returnthis.keys.filter(function(v){
if(v===key){
returnkey;
}
}).length>0;
};
/**
*重写toString
*/
this.toString=function(){
vars="{";
for(vari=0;i<this.keys.length;i++){
vark=this.keys[i];
s+=k+"="+this.data[k];
if(this.keys.length>i+1){
s+=','
}
}
s+="}";
returns;
};
/**
*解析字符串到Map
*{a=A,b=B,c=B,}
*/
this.parserStringAndAddMap=function(str){
varcount=0;
if(str&&str.length>0){
str=str.trim();
varstartIndex=str.indexOf("{"),endIndex=str.lastIndexOf("}");
if(startIndex!==-1&&endIndex!==-1){
str=str.substring(startIndex+1,endIndex);
vararrs=str.split(",");
for(vari=0;i<arrs.length;i++){
varkv=arrs[i].trim();
if(kv.length>0&&kv.indexOf("=")!==-1){
varkv_arr=kv.split("=");
if(kv_arr.length==2){
if(this.put(kv_arr[0].trim(),kv_arr[1].trim())){
count++;
}else{
console.error('error:kv:'+kv);
}
}
}
}
}else{
console.log("dataerror:"+str);
}
}else{
console.log('dataisnotempty');
}
returncount;
};
}
代码二:
Array.prototype.remove=function(s){
for(vari=0;i<this.length;i++){
if(s==this[i])
this.splice(i,1);
}
}
/**
*SimpleMap
*
*
*varm=newMap();
*m.put('key','value');
*...
*vars="";
*m.each(function(key,value,index){
*s+=index+":"+key+"="+value+"\n";
*});
*alert(s);
*
*@authordewitt
*@date2008-05-24
*/
functionMap(){
/**存放键的数组(遍历用到)*/
this.keys=newArray();
/**存放数据*/
this.data=newObject();
/**
*放入一个键值对
*@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){
returnthis.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(typeoffn!='function'){
return;
}
varlen=this.keys.length;
for(vari=0;i<len;i++){
vark=this.keys[i];
fn(k,this.data[k],i);
}
};
/**
*获取键值数组(类似Java的entrySet())
*@return键值对象{key,value}的数组
*/
this.entrys=function(){
varlen=this.keys.length;
varentrys=newArray(len);
for(vari=0;i<len;i++){
entrys[i]={
key:this.keys[i],
value:this.data[i]
};
}
returnentrys;
};
/**
*判断Map是否为空
*/
this.isEmpty=function(){
returnthis.keys.length==0;
};
/**
*获取键值对数量
*/
this.size=function(){
returnthis.keys.length;
};
/**
*重写toString
*/
this.toString=function(){
vars="{";
for(vari=0;i<this.keys.length;i++,s+=','){
vark=this.keys[i];
s+=k+"="+this.data[k];
}
s+="}";
returns;
};
}
functiontestMap(){
varm=newMap();
m.put('key1','Comtop');
m.put('key2','南方电网');
m.put('key3','景新花园');
alert("init:"+m);
m.put('key1','康拓普');
alert("setkey1:"+m);
m.remove("key2");
alert("removekey2:"+m);
vars="";
m.each(function(key,value,index){
s+=index+":"+key+"="+value+"\n";
});
alert(s);
}
以上内容通过两段代码给大家分享了JavaScript中实现Map,希望大家喜欢。