项目中经常会处理一些数据,像一个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;
}