關於for循環刪除數組內容出現的問題


昨天用for循環進行數組去重的時候出現的問題,

首先,用雙重for循環把前一個和所有后面的元素進行比較,如果相等則刪除。

但是,如果數組里面有三個以上連續相等的元素的時候,就會出現問題。 

1 var arr = [1,1,1,2,2]; 2 for(var i=0; i<arr.length-1; i++){ 3     for(var j=i+1; j<arr.length; j++){ 4         if(arr[i] === arr[j]){ 5             arr.splice(j,1); 6  } 7  } 8 } 9 document.write("arr:"+arr);

輸出:

這是因為當數組刪除一個元素的時候,數組長度減1,后面點元素就會往前移動一位,索引也減1,但是j還是進行了j++的操作。

即第一次進行刪除是,i=0  j=1,刪除以后arr=[1,1,2,2],然后j=2,就會忽略掉刪除以后j=1的元素繼續往后遍歷。

因此在每次進行了刪除的情況下,要對j進行減1

1 var arr = [1,1,1,2,2]; 2 for(var i=0; i<arr.length-1; i++){ 3     for(var j=i+1; j<arr.length; j++){ 4         if(arr[i] == arr[j]){ 5             arr.splice(j--,1); 6  } 7  } 8 } 9 document.write("arr:"+arr);

輸出

 

類似關於對數組元素進行刪除的,都要考慮數組長度會減1,后面的元素都會往前移動一位

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM