首頁 >web前端 >js教程 >JavaScript中關於for迴圈刪除陣列元素內容時出現的問題

JavaScript中關於for迴圈刪除陣列元素內容時出現的問題

高洛峰
高洛峰原創
2016-12-06 13:13:211363瀏覽

昨天用for迴圈進行陣列去重的時候出現的問題,

首先,用雙重for迴圈把前一個和所有後面的元素做比較,如果相等則刪除。

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

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

   

輸出:

JavaScript中關於for迴圈刪除陣列元素內容時出現的問題

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

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

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

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

   

輸出:

JavaScript中關於for迴圈刪除陣列元素內容時出現的問題

類似對數組輸出的,1組,後面的元素都會往前移動一位


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn