日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中Map的应用及Map中的bug

發布時間:2024/4/17 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中Map的应用及Map中的bug 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天一同事讓我解決一個關于JS的問題,想了想,還是用Map解決比較方面,先來看看JS中是如何定義Map的

map.js

  • function?Map()?{?? ?
  • ?var?struct?=?function(key,?value)?{?? ?
  • ??this.key?=?key;?? ?
  • ??this.value?=?value;?? ?
  • ?}?? ?
  • ??? ?
  • ?var?put?=?function(key,?value){?? ?
  • ??for?(var?i?=?0;?i?<?this.arr.length;?i++)?{?? ?
  • ???if?(?this.arr[i].key?===?key?)?{?? ?
  • ????this.arr[i].value?=?value;?? ?
  • ????return;?? ?
  • ???}?? ?
  • ??}?? ?
  • ???this.arr[this.arr.length]?=?new?struct(key,?value);?? ?
  • ?}?? ?
  • ??? ?
  • ?var?get?=?function(key)?{?? ?
  • ??for?(var?i?=?0;?i?<?this.arr.length;?i++)?{?? ?
  • ???if?(?this.arr[i].key?===?key?)?{?? ?
  • ?????return?this.arr[i].value;?? ?
  • ???}?? ?
  • ??}?? ?
  • ??return?null;?? ?
  • ?}?? ?
  • ??? ?
  • ?var?remove?=?function(key)?{?? ?
  • ??var?v;?? ?
  • ??for?(var?i?=?0;?i?<?this.arr.length;?i++)?{?? ?
  • ???v?=?this.arr.pop();?? ?
  • ???if?(?v.key?===?key?)?{?? ?
  • ????continue;?? ?
  • ???}?? ?
  • ???this.arr.unshift(v);?? ?
  • ??}?? ?
  • ?}?? ?
  • ??? ?
  • ?var?size?=?function()?{?? ?
  • ??return?this.arr.length;?? ?
  • ?}?? ?
  • ??? ?
  • ?var?isEmpty?=?function()?{?? ?
  • ??return?this.arr.length?<=?0;?? ?
  • ?}??? ?
  • ?this.arr?=?new?Array();?? ?
  • ?this.get?=?get;?? ?
  • ?this.put?=?put;?? ?
  • ?this.remove?=?remove;?? ?
  • ?this.size?=?size;?? ?
  • ?this.isEmpty?=?isEmpty;?? ?
  • }?
  • 這就是定義Map的代碼,將它寫成一個js文件,我這里命名為map.js,現在來看看如何使用,在頁面中先加載這個腳本文件

  • <script?src="map.js"></script>?
  • 測試?頁面

    ?

  • ?
  • <!--JSP初始化設置-->?
  • <html>?
  • <head>?
  • <META?HTTP-EQUIV="Content-Type"?CONTENT="text/html;?charset=utf-8">?
  • <META?HTTP-EQUIV="Pragma"?CONTENT="no-cache">?
  • <script?src="map.js"></script>?
  • </head>?
  • <body>?
  • <form?name="form1"?action=""?method="post">?
  • <table?width="100%"?border="0"?align="center"?cellpadding="0"?cellspacing="0"??class="yourPlace"?id=control?>?
  • ??<tr>?
  • ??????<td?height="20">哈哈</td>?
  • ??</tr>?
  • </table>?
  • ?
  • <table?width="330"?border="0"?align="center"?cellpadding="0"?cellspacing="0"?class="tabtitle">?
  • ??<tr>?
  • ????<td>信息</td>?
  • ???</tr>?
  • </table>?
  • ??<table?width="330"??border="0"?align="center"?cellpadding="0"?cellspacing="0"?style="border-collapse:collapse;">?
  • ????????<tr>?
  • ??????????<td?width="100"?class="cardActive"?id="td1"?onclick="javascript:changeCss(1);"><a?href="javascript:changeCard('base')"?class="cardLink">動漫人物</a></td>?
  • ??????????<td?width="100"?class="cardNormal"?id="td2"?onclick="javascript:changeCss(2);"><a?href="javascript:changeCard('pro')"?class="cardLink">動漫人物1</a></td>?
  • ??????????<td?width="100"?class="cardNormal"?id="td3"?onclick="javascript:changeCss(3);"><a?href="javascript:changeCard('zfld')"?class="cardLink">動漫人物2</a></td>?
  • ??????????<td?width="100"?class="cardNormal"?id="td3"?onclick="javascript:changeCss(4);"><a?href="javascript:changeCard('zxld')"?class="cardLink">動漫人物3</a></td>?
  • ????????</tr>?
  • ??</table>?
  • <table?width="330"?border="0"?align="center"?cellpadding="3"?cellspacing="0"?class="tabout"?style="display:block"?id="base"?is="1">?
  • ?????????????????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="1"?value="小新"?onClick="EverChecked(this);">?
  • ????????????????小新 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="2"?value="火影"?onClick="EverChecked(this);">?
  • ????????????????火影 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="3"?value="葫蘆娃"?onClick="EverChecked(this);">?
  • ????????????????葫蘆娃 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ???????????????? ?
  • </table>?
  • <table?width="330"?border="0"?align="center"?cellpadding="3"?cellspacing="0"?class="tabout"?style="display:none"?id="pro"?is="1">?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="20"?value="一休哥"?onClick="EverChecked(this);">?
  • ????????????????一休哥 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="45"?value="忍者神龜"?onClick="EverChecked(this);">?
  • ????????????????忍者神龜 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="4"?value="馬良"?onClick="EverChecked(this);">?
  • ????????????????馬良 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ????????????????? ?
  • </table>?
  • <table?width="330"?border="0"?align="center"?cellpadding="3"?cellspacing="0"?class="tabout"?style="display:none"?id="zfld"?is="1">?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="2"?value="孫悟空"?onClick="EverChecked(this);">?
  • ????????????????孫悟空 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="10"?value="唐僧"?onClick="EverChecked(this);">?
  • ????????????????唐僧 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="26"?value="擎天柱"?onClick="EverChecked(this);">?
  • ????????????????擎天柱 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ????????????????? ?
  • </table>?
  • <table?width="330"?border="0"?align="center"?cellpadding="3"?cellspacing="0"?class="tabout"?style="display:none"?id="zxld"?is="1">?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="37"?value="淘汰朗"?onClick="EverChecked(this);">?
  • ????????????????淘汰朗 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="51"?value="老龍王"?onClick="EverChecked(this);">?
  • ????????????????老龍王 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ?????????????????<tr?class="trwhite">??? ?
  • ???????????????????<td?class="tdFormInputMid"?><input?name="infoLinkIds"?type="checkbox"?idd="63"?value="哪吒"?onClick="EverChecked(this);">?
  • ????????????????哪吒 ?
  • ??????????????????</td>???????????? ?
  • ??????????????????</tr>?
  • ????????????????? ?
  • </table>?
  • <span?id="data"></span>? ?
  • ?</form>?
  • ?</body>?
  • ?<script>?
  • ??????var?fieldId; ?
  • ??????var?fieldName;? ?
  • ??????var?map?=?new?Map(); ?
  • ??????var?k?=?0; ?
  • ???function?EverChecked(obj){ ?
  • ???????????var?id=""; ?
  • ???????????var?name=""; ?
  • ???????????var?fieldId=""; ?
  • ???????????var?fieldName=""; ?
  • ??????????? ?
  • ????????????if(obj.checked==true){ ?
  • ????????????if(map.size()!=0){ ?
  • ???????????????for(var?m=0;m<map.size();m++){ ?
  • ????????????????????if(map.get(m)!=obj.value){?? ?
  • ????????????????????????if(id?==?""?||?name?==?""){ ?
  • ????????????????????????id?=obj.idd; ?
  • ????????????????????????name?=obj.value; ?
  • ????????????????????????}else{ ?
  • ????????????????????????id?+=","+obj.idd; ?
  • ????????????????????????name?+=","+obj.value; ?
  • ????????????????????????} ?
  • ????????????????????????} ?
  • ???????????????} ?
  • ????????????}else{ ?
  • ????????????????????????map.put(k,obj.value); ?
  • ????????????????????????kk=k+1; ?
  • ????????????????????????} ?
  • ?
  • ????????????}else{ ?
  • ????????????????map.remove(k); ?
  • ????????????} ?
  • ????????fieldId.value?=?id; ?
  • ????????name=""; ?
  • ????????for(var?j=0;j<map.size();j++){ ?
  • ????????????if(name?==?""){ ?
  • ????????????????????name?=map.get(j); ?
  • ????????????????} ?
  • ????????????????else{ ?
  • ????????????????????name?+=","+map.get(j); ?
  • ????????????????} ?
  • ????????} ?
  • ????????fieldName.value?=name; ?
  • ???} ?
  • ??? ?
  • ??? ?
  • ???function?changeCard(id){ ?
  • ????var?list=document.getElementsByTagName("table"); ?
  • ????for(var?i=0;i<list.length;i++){ ?
  • ????????if(list.item(i).is){ ?
  • ????????????list.item(i).style.display="none"; ?
  • ????????} ?
  • ????} ?
  • ????document.getElementById(id).style.display="block"; ?
  • ????//alert(list.size()); ?
  • } ?
  • ?function?changeCss(status){ ?
  • ?
  • if(status==1)?{ ?
  • ????????????var?t1?=?document.getElementById("td1"); ?
  • ????????????var?t2?=?document.getElementById("td2"); ?
  • ????????????t1.className="cardActive"; ?
  • ????????????t2.className="cardNormal"; ?
  • ????????????var?t3?=?document.getElementById("td3"); ?
  • ????????????if(t3!=""&&t3!=null){ ?
  • ????????????t3.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t4?=?document.getElementById("td4"); ?
  • ????????????if(t4!=""&&t4!=null){ ?
  • ????????????t4.className="cardActive"; ?
  • ????????????}; ?
  • ????????????var?t5?=?document.getElementById("td5"); ?
  • ????????????if(t5!=""&&t5!=null){ ?
  • ????????????t5.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t6?=?document.getElementById("td6"); ?
  • ????????????if(t6!=""&&t6!=null){ ?
  • ????????????t6.className="cardNormal"; ?
  • ????????????}; ?
  • ????????}else? ?
  • ????????if(status==2)?{ ?
  • ????????????var?t1?=?document.getElementById("td1"); ?
  • ????????????t1.className="cardNormal"; ?
  • ????????????var?t2?=?document.getElementById("td2"); ?
  • ????????????t2.className="cardActive"; ?
  • ????????????var?t3?=?document.getElementById("td3"); ?
  • ????????????if(t3!=""&&t3!=null){ ?
  • ????????????t3.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t4?=?document.getElementById("td4"); ?
  • ????????????if(t4!=""&&t4!=null){ ?
  • ????????????t4.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t5?=?document.getElementById("td5"); ?
  • ????????????if(t5!=""&&t5!=null){ ?
  • ????????????t5.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t6?=?document.getElementById("td6"); ?
  • ????????????if(t6!=""&&t6!=null){ ?
  • ????????????t6.className="cardNormal"; ?
  • ????????????}; ?
  • ????????}else? ?
  • ????????if(status==3)?{ ?
  • ????????????var?t1?=?document.getElementById("td1"); ?
  • ????????????t1.className="cardNormal"; ?
  • ????????????var?t2?=?document.getElementById("td2"); ?
  • ????????????t2.className="cardNormal"; ?
  • ????????????var?t3?=?document.getElementById("td3"); ?
  • ????????????t3.className="cardActive"; ?
  • ????????????var?t4?=?document.getElementById("td4"); ?
  • ????????????if(t4!=""&&t4!=null){ ?
  • ????????????t4.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t5?=?document.getElementById("td5"); ?
  • ????????????if(t5!=""&&t5!=null){ ?
  • ????????????t5.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t6?=?document.getElementById("td6"); ?
  • ????????????if(t6!=""&&t6!=null){ ?
  • ????????????t6.className="cardNormal"; ?
  • ????????????}; ?
  • ????????}else? ?
  • ????????if(status==4)?{ ?
  • ????????????var?t1?=?document.getElementById("td1"); ?
  • ????????????t1.className="cardNormal"; ?
  • ????????????var?t2?=?document.getElementById("td2"); ?
  • ????????????t2.className="cardNormal"; ?
  • ????????????var?t3?=?document.getElementById("td3"); ?
  • ????????????t3.className="cardNormal"; ?
  • ????????????var?t4?=?document.getElementById("td4"); ?
  • ????????????if(t4!=""&&t4!=null){ ?
  • ????????????t4.className="cardActive"; ?
  • ????????????}; ?
  • ????????????var?t5?=?document.getElementById("td5"); ?
  • ????????????if(t5!=""&&t5!=null){ ?
  • ????????????t5.className="cardNormal"; ?
  • ????????????}; ?
  • ????????????var?t6?=?document.getElementById("td6"); ?
  • ????????????if(t6!=""&&t6!=null){ ?
  • ????????????t6.className="cardNormal"; ?
  • ????????????}; ?
  • ????????} ?
  • ????} ?
  • ???</script>?
  • ????</html>???
  • 在測試的過程中發現一個bug,添加的時候是按你點擊的順序走的,但是一旦取消一個checkbox,那么這個map就會出現問題,取不到實際的值,一遇到null就直接結束了,想了半天沒有想出辦法,最后折中了一下,還是用array把這個問題解決了,也就是說不用map存儲了,改用數組,代碼如下

    ?

  • function?EverChecked(obj){ ?
  • ???????????var?id=""; ?
  • ???????????var?name=""; ?
  • ???????????var?fieldId=""; ?
  • ???????????var?fieldName=""; ?
  • ???????????var?insertData?=?1;//1插入,0不插入 ?
  • ????????????if(obj.checked==true){ ?
  • ????????????????if(map.length!=0){ ?
  • ???????????????????for(var?m=0;m<map.length;m++){ ?
  • ????????????????????????if(map[m]==obj.value){ ?
  • ????????????????????????????insertData?=?0; ?
  • ????????????????????????????break; ?
  • ????????????????????????????} ?
  • ???????????????????} ?
  • ????????????????} ?
  • ????????????????if(insertData==1){?????? ?
  • ????????????????if(id?==?""?||?name?==?""){ ?
  • ????????????????????????id?=obj.idd; ?
  • ????????????????????????}else{ ?
  • ????????????????????????id?+=","+obj.idd; ?
  • ????????????????????????} ?
  • ???????????????????????? ?
  • ????????????????????????alert(k); ?
  • ????????????????????????map[k]=obj.value; ?
  • ????????????????????????alert(k+":"+obj.value); ?
  • ????????????????????????k=k+1; ?
  • ????????????????????????alert(map.length); ?
  • ????????????????????????} ?
  • ????????????}else{ ?
  • ????????????????for(var?i=0;i<map.length;i++){ ?
  • ????????????????if(map[i]==obj.value){ ?
  • ????????????????????????map[i]=0; ?
  • ????????????????????????break; ?
  • ????????????????????????} ?
  • ????????????????} ?
  • ????????????} ?
  • ????????fieldId.value?=?id; ?
  • ????????name=""; ?
  • ????????for(var?j=0;j<map.length;j++){ ?
  • ????????????alert(j+":OO"+map[j]); ?
  • ????????????if(map[j]!=0){ ?
  • ????????????????if(name?==?""){ ?
  • ????????????????????name?=map[j]; ?
  • ????????????????}else{ ?
  • ????????????????????name?+=","+map[j]; ?
  • ????????????????} ?
  • ????????????????????alert(j+"==="+map[j]); ?
  • ????????????} ?
  • ???????? ?
  • ????????} ?
  • ???????? ?
  • ????????if(name!=null&&name!=""){ ?
  • ????????fieldName.value?=name; ?
  • ????????????alert(name); ?
  • ????????} ?
  • ???? ?
  • ???????? ?
  • ???}?
  • 還是js本身的東西好用,如果有人能解決我用map遇到的問題,請聯系我,謝謝!



    本文轉自sucre03 51CTO博客,原文鏈接:http://blog.51cto.com/sucre/450691,如需轉載請自行聯系原作者

    總結

    以上是生活随笔為你收集整理的JavaScript中Map的应用及Map中的bug的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。