js遍歷陣列時刪除指定物件出現問題
阿新 • • 發佈:2018-12-25
一、問題描述
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。
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。問題分析:便於描述給每個元素加上一個索引在括號內為索引
二、問題解決
從上面的描述可以看出當刪除第一個元素時不會出現問題,當刪除處第一個之外的元素時會出現問題,索引總是 i - 1;因此可以使用以下方式解決
for(var i=0;i<arr.length;i++){ //刪除大於10的數 if(arr[i]>10){ arr.splice(i--,1); } }