for迴圈無法刪除陣列所有指定元素
當前還有內建的方法可以刪除陣列中為特定值的所有元素。
比如刪除陣列中所有值為"螞蟻部落"的元素。
首先想到的是利用for迴圈遍歷陣列元素進行比對,然後刪除符合要求的元素。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼Array.prototype.removeByValue = function(val){ for(let i=0; i<this.length; i++) { if(this[i] == val) { this.splice(i, 1); } } } let arr=["螞蟻部落", 4, "antzone", "螞蟻部落"]; arr.removeByValue("螞蟻部落"); console.log(arr);
程式碼執行效果截圖如下:
上述程式碼表現非常完美,陣列中的兩個"螞蟻部落"全部被刪除。
通過for迴圈挨個進行比對,如果陣列元素值等於"螞蟻部落",那麼刪除。
無論是邏輯還是執行結果都看起來無懈可擊,然而事實卻並非如此。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼Array.prototype.removeByValue = function(val){ for(let i=0; i<this.length; i++) { if(this[i] == val) { this.splice(i, 1); } } } let arr=["螞蟻部落","螞蟻部落", 4, "antzone"]; arr.removeByValue("螞蟻部落"); console.log(arr);
程式碼執行效果截圖如下:
removeByValue方法程式碼沒有進行任何改變,唯一改變的是陣列最後一個元素挪到第二個位。
可以看到此次並沒有成功刪除所有的"螞蟻部落"。
原因分析如下:
(1).第一次刪除的時候,完全沒有任何問題。
(2).但是以後問題來了,當再次迴圈的時候,陣列的length和之前相比小了1,第一個被刪除元素後面所有的元素的索引位置集體減1,也就是在陣列中的位置向前挪一位,然而i的值依然按照既定規則加1,所以第二個"螞蟻部落"無法for迴圈遍歷到,當然也就無法被刪除。
程式碼修改如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼Array.prototype.removeByValue = function(val){ for(let i=0; i<this.length; i++) { if(this[i] == val) { this.splice(i, 1); i=-1; } } } let arr=["螞蟻部落","螞蟻部落", 4, "antzone", ]; arr.removeByValue("螞蟻部落"); console.log(arr);
程式碼執行效果截圖如下:
上面程式碼成功刪除所有的指定元素。
為對程式碼的唯一改動就是,刪除指定元素之後,將i重置為-1。
這樣的話,再進行下一次迴圈的時候,首先會執行i++,這樣i的值變成0。
於是又從陣列的第一個元素進行比對,絕對不可能遺漏任何元素。
相關閱讀:
(1).prototype參閱JavaScript prototype 原型一章節。
(2).splice方法參閱JavaScript 陣列 splice一章節。
相關文章
- JavaScript 刪除陣列指定元素JavaScript陣列
- JavaScript刪除陣列中指定元素JavaScript陣列
- Array · 刪除陣列中指定的元素陣列
- js刪除陣列指定索引的元素JS陣列索引
- javascript陣列如何刪除所有的指定值陣列項JavaScript陣列
- js刪除陣列元素中的指定值JS陣列
- 陣列刪除指定項陣列
- 刪除陣列中的指定元素例項程式碼陣列
- JavaScript刪除陣列元素JavaScript陣列
- 陣列元素迴圈右移問題陣列
- JavaScript刪除array陣列元素JavaScript陣列
- 在迴圈陣列時使用splice()方法刪除陣列遇到的問題陣列
- Linux迴圈遍歷所有檔案,刪除指定字尾名檔案Linux
- JavaScript 刪除陣列重複元素JavaScript陣列
- JavaScript 陣列新增或者刪除元素JavaScript陣列
- JavaScript陣列刪除重複元素JavaScript陣列
- list增強for迴圈刪除元素報錯
- 【leetcode】27. Remove Element 刪除陣列指定值的元素LeetCodeREM陣列
- 陣列迴圈陣列
- PHP 刪除陣列中元素的方式PHP陣列
- 根據陣列的值刪除元素陣列
- javascript刪除陣列元素的程式碼JavaScript陣列
- JavaScript刪除陣列第一個元素JavaScript陣列
- jQuery刪除指定子元素jQuery
- jQuery刪除指定li元素jQuery
- JavaScript刪除陣列最後一個元素JavaScript陣列
- javascript delete運算子刪除array陣列元素JavaScriptdelete陣列
- js刪除陣列中重複的元素JS陣列
- js刪除陣列中的重複元素JS陣列
- javascript刪除陣列重複元素程式碼JavaScript陣列
- PHP從陣列中刪除元素的方法PHP陣列
- JS] JS 之刪除陣列中的元素JS陣列
- JavaScript 刪除陣列最後一個元素JavaScript陣列
- 刪除陣列中的元素(連結串列)陣列
- 陣列迴圈移位陣列
- javascript刪除陣列指定值程式碼例項JavaScript陣列
- golang 陣列去重 移除陣列指定元素Golang陣列
- list中for迴圈刪除多個元素為何報錯?