数组坍塌
數組坍塌
什么是數組坍塌
? 為了能夠更為形象直觀地理解什么是“數組坍塌”,我們可以將數組類比為一幢樓房,而數組中的每一個元素類比為樓房的各個樓層。在這樣一個模型基礎上,我們再來對數組循環遍歷的過程進行一個簡單的模擬。
? 當采用for循環對數組進行遍歷的時候,為for循環定義的變量i如同樓房模型的樓層號,循環會根據樓層號對對應樓層中的內容進行訪問,代碼如下:
? 有些時候,我們會根據需求刪除一個或多個不需要的數據,以下程序模擬了用數組循環刪除數組中的數據 ‘2’。
var arr = [0,1,2,3] for(var i = 0; i < arr.length; i++){if(arr[i] == 2){console.log(arr); //打印結果為[0,1,2,3]console.log(i); //打印結果為2console.log(arr[i+1]); //打印結果是2arr.splice(i,1); //執行數組刪除,刪除arr[2];console.log(arr); //打印結果為[0,1,3]console.log(i); //打印結果為2console.log(arr[i+1]); //打印結果是3} }? 根據以上程序的執行結果可以看出,當數組執行了數組刪除操作后,數組發生了改變( 由原來的[0,1,2,3]變為了[0,1,3] ),且原本arr[i+1]所對應的數據也發生了改變(由之前的3變成了undefined,因為第4個數據不存在),這一過程我們可以用前文的模型做一個簡單的模擬。
? 就如樓房抽離了一層,數組在刪除某一個數據后,后面的數組會自動向前補齊空缺,因此之前各個序號所對應的數據都發生了改變,這將對我們的循環遍歷造成影響。為了解決這個問題,當對數組中的部分數據進行刪除后,我們必須調整當前序號,以保證數組能夠繼續正常地循環遍歷之前沒用遍歷的數據。
? 從以上程序中可以看出,當我們刪除了數據 ‘2’ 以后,我們對 i 進行了自減操作,而a[i+1]對應的數值仍舊還是3,這樣操作就保證了數組遍歷的正確執行。以此類推,當我們減去多個數據的時候,也應當對序號i做相關的自減操作以保證循環的準確。
? 這是我在逆戰班學習的第二個月,我熱愛前端,我希望我還能夠學到更多。希望我的文章對讀者有所幫助,也歡迎大家友善地指出我的不足。
總結
- 上一篇: Hash算法进行签名验签
- 下一篇: win10无法自动修复此计算机,Win1