項目中經常會處理一些資料,像一個json資料,裡邊全是數組,要把所有的資料的相同的屬性值放在一個數組裡,然後再判重,擷取最終的資料,是以就會經常用到數組判重,于是找了幾個常用的方法。如下:
第一種:先把原數組的第一個值傳進新數組,然後從索引為1開始周遊原數組,周遊每一個的時候再周遊新數組的每一項,如果不全等的話,把原數組的這個值寫入新數組,這樣最後得到的新數組就是不重複的值。
function unique(arr){
var res = [arr[]];
for(var i=;i<arr.length;i++){
var repeat = false;
for(var j=;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[]];
for(var i=;i<arr2.length;i++){
if(arr2[i] !== res[res.length-]){
res.push(arr2[i]);
}
}
return res;
}
第三種:利用json屬性是否一樣去重,把原數組的每一項的值添進json的屬性,每次周遊原數組看是否已經存在了這個json屬性,如果沒有存在就添進json屬性和添進新數組。
function unique(arr){
var res =[];
var json = {};
for(var i=;i<arr.length;i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = ;
}
}
return res;
}
第四種:個人覺得這一個是最簡潔的去重方式,還沒有很大的彎。就是首先把原數組的第一項值添進新數組,完事周遊原數組,把原數組的每一項值放在新數組裡indexof()方法看是否存在,如果不存在則把這個值添進新數組。
function unique(arr){
var newArr = [arr[]];
for(var i=;i<arr.length;i++){
if(newArr.indexOf(arr[i]) == -){
newArr.push(arr[i]);
}
}
return newArr;
}