1. 程式人生 > >JavaScript中陣列去重的幾種常用方法

JavaScript中陣列去重的幾種常用方法

專案中經常會處理一些資料,像一個json資料,裡邊全是陣列,要把所有的資料的相同的屬性值放在一個數組裡,然後再判重,獲取最終的資料,所以就會經常用到陣列判重,於是找了幾個常用的方法。如下:

第一種:先把原陣列的第一個值傳進新陣列,然後從索引為1開始遍歷原陣列,遍歷每一個的時候再遍歷新陣列的每一項,如果不全等的話,把原陣列的這個值寫入新陣列,這樣最後得到的新陣列就是不重複的值。

function unique(arr){

  var res = [arr[0]];

  for(var i=1;i<arr.length;i++){

    var repeat = false;

    for
(var j=0;j<res.length;j++){       if(arr[i] === res[j]){         repeat = true;         break;       }     }     if(!repeat){       res.push(arr[i]);     }   }   return res; }

第二種:先把原陣列排序,所有格式不同的也都會排到一起去,然後比較最後一個是不是和陣列的任何一項一樣,不一樣則添進新陣列。

function unique(arr){

  var arr2 = arr.sort();

  var res = [arr2[0
]
];   for(var i=1;i<arr2.length;i++){     if(arr2[i] !== res[res.length-1]){       res.push(arr2[i]);     }   }   return res; }

第三種:利用json屬性是否一樣去重,把原陣列的每一項的值添進json的屬性,每次遍歷原陣列看是否已經存在了這個json屬性,如果沒有存在就添進json屬性和添進新陣列。

function unique(arr){

  var res =[];

  var json = {};

  for(var i=0;i<arr.
length;i++){     if(!json[arr[i]]){       res.push(arr[i]);       json[arr[i]] = 1;     }   }   return res; }

第四種:個人覺得這一個是最簡潔的去重方式,還沒有很大的彎。就是首先把原陣列的第一項值添進新陣列,完事遍歷原陣列,把原陣列的每一項值放在新數組裡indexof()方法看是否存在,如果不存在則把這個值添進新陣列。

  function unique(arr){
     var newArr = [arr[0]];
     for(var i=1;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){
             newArr.push(arr[i]);
        }
        }
        return newArr;
   }