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陣列
- Array · 刪除陣列中指定的元素陣列
- 陣列刪除指定項陣列
- JavaScript刪除陣列元素JavaScript陣列
- 【leetcode】27. Remove Element 刪除陣列指定值的元素LeetCodeREM陣列
- JavaScript刪除array陣列元素JavaScript陣列
- Linux迴圈遍歷所有檔案,刪除指定字尾名檔案Linux
- 在迴圈陣列時使用splice()方法刪除陣列遇到的問題陣列
- JavaScript 陣列新增或者刪除元素JavaScript陣列
- JavaScript陣列刪除重複元素JavaScript陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- list增強for迴圈刪除元素報錯
- 根據陣列的值刪除元素陣列
- PHP 刪除陣列中元素的方式PHP陣列
- PHP從陣列中刪除元素的方法PHP陣列
- 陣列迴圈陣列
- [PAT B] 1008 陣列元素迴圈右移問題陣列
- 1008 陣列元素迴圈右移問題 (20分)陣列
- golang 陣列去重 移除陣列指定元素Golang陣列
- JS刪除陣列裡的某個元素方法JS陣列
- 1008 陣列元素迴圈右移問題 (20 分)java陣列Java
- list中for迴圈刪除多個元素為何報錯?
- JS陣列不新增重複值 & 刪除指定值JS陣列
- JavaScript陣列檢索指定元素JavaScript陣列
- JavaScript 刪除字串中所有指定字元JavaScript字串字元
- JavaScript刪除字串中所有指定字元JavaScript字串字元
- python迴圈刪除漏洞Python
- JavaScript 拼接多個陣列並刪除重複元素JavaScript陣列
- JavaScript 陣列 指定索引位置插入元素JavaScript陣列索引
- jQuery刪除具有指定文字的li元素jQuery
- PAT1008 陣列元素迴圈右移問題(java實現)陣列Java
- JavaScript陣列指定位置插入新元素JavaScript陣列
- leetcode-刪除排序陣列中的重複項+移除元素LeetCode排序陣列
- for..in 迴圈陣列需注意陣列
- 陣列--移除陣列中指定的元素,不改變原陣列和改變原陣列陣列
- 反直覺正迴圈刪除
- 在ArrayList的迴圈中刪除元素,會不會出現問題?
- 寫一個方法找出指定一維陣列所有不重複的元素和個數陣列