1. 程式人生 > >關於刪除陣列中相同元素的一個小技巧

關於刪除陣列中相同元素的一個小技巧

如果說到刪除陣列中的相同元素,比如這裡定義一個數組var arr=[1,1,2,2,3,3,3],我想要刪除陣列中的2,那麼應該怎麼做呢。大家都會想到使用for迴圈就可以了,of course . 

var arr=[1,1,1,2,2,2,3,3,3,3];
for (var i=0,len=arr.length;i<len;i++){
    if(arr[i]===2){
        arr.splice(i,1)}
}
我們預期的結果應該是arr=[1,1,1,3,3,3,3],但是實際的列印結果是[1,1,1,2,3,3,3,3],奇怪,怎麼還有一個2沒有刪除呢,那是因為當我們刪除第一個2(索引為3)後,後面的元素都會向前挪一步,這時,這個陣列就變成了[1,1,1,2,2,3,3,3,3] ,進行下次迴圈時 i 就從索引4開始了,此時,就會有一個2被跳過去。

那麼怎麼才能實現我們想要的結果呢,我們可以從後向前迴圈,也就是把i的初始值為arr.length-1,每次迴圈i的值自減1,就是這樣

var arr=[1,1,1,2,2,2,3,3,3,3];
for (var i=arr.length-1;i>=0;i--){
    if(arr[i]===2){
        arr.splice(i,1)}
}
此時,arr=[1,1,1,3,3,3,3],就是我們想要的結果了