JavaScript中陣列去重的幾種常用方法
阿新 • • 發佈:2019-01-10
專案中經常會處理一些資料,像一個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;
}