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,希望大家喜欢。