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程序设计有所帮助。