1. 程式人生 > >js遍歷陣列時刪除指定物件出現問題

js遍歷陣列時刪除指定物件出現問題

一、問題描述

js使用splice刪除元素時,會將後面的元素來補填被刪掉元素的索引。這樣會導致遍歷陣列刪除陣列的多個元素時出現隔個索引

刪除現象。(這樣的描述可能有點抽象,用程式碼說話)。

var arr = [1,3,4,6,9,17,23,12];
console.log("刪除前陣列:\n"+arr);
for(var i=0;i<arr.length;i++){
    //刪除大於10的數
if(arr[i]>10){
        arr.splice(i,1);
    }
}
console.log("刪除後陣列:\n"+arr);

按照邏輯,應該刪除的元素是17、23、12,而只刪除了17、12。問題分析:便於描述給每個元素加上一個索引在括號內為索引

1 (0)、3 (1)、4 (2)、6(3)、9 (4)、17 (5)、23 (6)、12 (7)。當刪除17的時候,陣列的總長度變為7,此時剩下元素和索引情況1 (0)、3(1)、4 (2)、6 (3)、9(4)、23(5)、12(6);而 i 開始執行6了,此時會刪除索引為6的元素,即將12刪除了,因此刪除了17,12。

二、問題解決

從上面的描述可以看出當刪除第一個元素時不會出現問題,當刪除處第一個之外的元素時會出現問題,索引總是 i - 1;因此可以使用以下方式解決

for(var i=0;i<arr.length;i++){
    //刪除大於10的數
if(arr[i]>10
){ arr.splice(i--,1); } }