最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS逆序遍歷實現(xiàn)代碼

 更新時間:2014年12月02日 23:12:41   投稿:mdxy-dxy  
遍歷是程序中最常用的語法之一。在JS里,小到數(shù)據(jù)處理,大到列表渲染,配合ajax對json數(shù)據(jù)的支持,遍歷的使用場景也越來越多

最常用的遍歷方式為for語句(也有遞歸、while方式)。當(dāng)我們遍歷一個數(shù)組的時候,我們一般會這么做:

復(fù)制代碼 代碼如下:

var arr = [1,2,3,4,5,6,7,8,9,10];
for(var i=0,total=arr.length;i<total;i++){
  console.log(i,arr[i]);
}

這就是最常用的遍歷方式:正序遍歷。它從數(shù)組的第一項依次走到最后一項。

那為什么今天小劇還會提到逆序遍歷呢?

這里不得不提下小劇寫的組件里最常用的一個模塊:events。用于創(chuàng)建自定義事件模型,處理事件的監(jiān)聽及觸發(fā),最簡單的發(fā)布訂閱(pub/sub)模式。因為最近發(fā)現(xiàn)存在內(nèi)存溢出的隱患,需要在原有的基礎(chǔ)上增加一個解除綁定的方法。

因為同一事件名的回調(diào)函數(shù)是放在同一數(shù)組中,解除綁定也只需要從數(shù)組中找到對應(yīng)的回調(diào)函數(shù)(同一回調(diào)函數(shù)可能綁定多次),并且移除即可。

很簡單的需求,于是很自然地寫出類似下面的代碼:

復(fù)制代碼 代碼如下:

//移除數(shù)組中的2
var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i<total;i++){
  if(arr[i] == 2){
    //符合條件,移除
    arr.splice(i,1);
  }
}
console.log(arr);

很正常的代碼有木有,可最終輸出結(jié)果卻是:[1, 2, 2, 1, 1, 2],顯然執(zhí)行結(jié)果不符合預(yù)期。

問題出在哪兒呢?

仔細(xì)分析了一下,發(fā)現(xiàn)問題出在了每次匹配成功,執(zhí)行移除操作之后,都會跳過下一個待檢查項,因為數(shù)組中之后的每一項都向前上升一位。

找到了問題所在,改了下代碼,在執(zhí)行移除操作之后,調(diào)整序列索引index(i)。

復(fù)制代碼 代碼如下:

//移除數(shù)組中的2
var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i<total;i++){
  if(arr[i] == 2){
    //符合條件,移除
    arr.splice(i,1);
    //調(diào)整序列索引
    i = i-1;
  }
}
console.log(arr);

問題解決了,但總感覺修改序列索引是件調(diào)戲for循環(huán)的事。于是靈光一閃,啪啪啪,敲出下面的代碼:

復(fù)制代碼 代碼如下:

//移除數(shù)組中的2
var arr = [1,2,2,2,2,1,1,2,2];
for(var i = arr.length-1;i!=-1;i--){
  if(arr[i] == 2){
    //符合條件,移除
    arr.splice(i,1);
  }
}
console.log(arr);

遍歷的過程不變,唯一變化的是遍歷的順序變了,對了,還少了一個變量total。

好吧,我承認(rèn)今天寫的東西很屌絲,但通過這個例子,給以后寫代碼的時候提了個醒,在遍歷過程中,如果涉及到修改數(shù)組本身(增刪),逆序遍歷是個比較保險的遍歷方式。

coding筆記,留給以后嘲笑自己!

轉(zhuǎn)載請注明來源:http://bh-lay.com/blog/148c07761fa

相關(guān)文章

  • 企業(yè)微信掃碼登錄網(wǎng)頁功能實現(xiàn)代碼

    企業(yè)微信掃碼登錄網(wǎng)頁功能實現(xiàn)代碼

    這篇文章主要介紹了企業(yè)微信掃碼登錄網(wǎng)頁功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • uniapp uni-swipe-action 滑動操作狀態(tài)恢復(fù)功能實現(xiàn)

    uniapp uni-swipe-action 滑動操作狀態(tài)恢復(fù)功能實現(xiàn)

    按照uni-app官方文檔的寫法,當(dāng)前一條滑動確認(rèn)之后頁面列表刷新但是滑動的狀態(tài)還在,我們需要在滑動確認(rèn)之后 頁面刷新 滑動狀態(tài)恢復(fù),下面小編給大家分享uniapp uni-swipe-action 滑動操作狀態(tài)恢復(fù)功能實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • JavaScript中如何對多維數(shù)組(矩陣)去重的實現(xiàn)

    JavaScript中如何對多維數(shù)組(矩陣)去重的實現(xiàn)

    這篇文章主要介紹了JavaScript中如何對多維數(shù)組(矩陣)去重的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Echarts實現(xiàn)單條折線可拖拽效果

    Echarts實現(xiàn)單條折線可拖拽效果

    這篇文章主要為大家詳細(xì)介紹了Echarts實現(xiàn)單條折線可拖拽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • javascript的parseFloat()方法精度問題探討

    javascript的parseFloat()方法精度問題探討

    javascript中的parseFloat()方法,大家應(yīng)該不陌生吧,下面為大家介紹下其精度問題,感興趣的朋友不要錯過
    2013-11-11
  • javascript實現(xiàn)移動端 HTML5 圖片上傳預(yù)覽和壓縮功能示例

    javascript實現(xiàn)移動端 HTML5 圖片上傳預(yù)覽和壓縮功能示例

    這篇文章主要介紹了javascript實現(xiàn)移動端 HTML5 圖片上傳預(yù)覽和壓縮功能,結(jié)合實例形式分析了javascript移動端 HTML5 圖片上傳預(yù)覽和壓縮功能具體實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-05-05
  • 詳解js前端代碼異常監(jiān)控

    詳解js前端代碼異常監(jiān)控

    本文主要介紹了js代碼異常監(jiān)控的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 微信小程序Error:Fail?to?open?IDE問題的解決方法

    微信小程序Error:Fail?to?open?IDE問題的解決方法

    今天學(xué)習(xí)小程序時無法通過HBuilderX運行微信小程序,查了相關(guān)資料后解決了,下面這篇文章主要給大家介紹了關(guān)于微信小程序Error:Fail?to?open?IDE問題的解決方法,需要的朋友可以參考下
    2023-04-04
  • p5.js碼繪“跳動的小正方形”的實現(xiàn)代碼

    p5.js碼繪“跳動的小正方形”的實現(xiàn)代碼

    這篇文章主要介紹了p5.js碼繪“跳動的小正方形”,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 微信小程序之幾種常見的彈框提示信息實現(xiàn)詳解

    微信小程序之幾種常見的彈框提示信息實現(xiàn)詳解

    這篇文章主要介紹了微信小程序之幾種常見的彈框提示信息實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論

商河县| 桐乡市| 贵阳市| 南和县| 库车县| 永靖县| 印江| 黄骅市| 泊头市| 贵德县| 临洮县| 迁安市| 东乡族自治县| 兰溪市| 荣昌县| 延长县| 美姑县| 漳州市| 余姚市| 凌源市| 黄龙县| 铜鼓县| 四子王旗| 平谷区| 万山特区| 合山市| 公主岭市| 黎平县| 莱芜市| 新昌县| 红河县| 莒南县| 金堂县| 霍林郭勒市| 华宁县| 穆棱市| 孝昌县| 周至县| 合肥市| 盐津县| 阳原县|