昨天用for迴圈進行數組去重的時候出現的問題, 首先,用雙重for迴圈把前一個和所有後面的元素進行比較,如果相等則刪除。 但是,如果數組裡面有三個以上連續相等的元素的時候,就會出現問題。 輸出: 這是因為當數組刪除一個元素的時候,數組長度減1,後面點元素就會往前移動一位,索引也減1,但是j還是進行了 ...
昨天用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,後面的元素都會往前移動一位