# JS实现数组去重方法
## 方法一
>[info]【**原理**】:
双层循环,外层循环元素,内层循环时比较值
如果有相同的值则跳过,不相同则push进数组
~~~
function unique(arr){
var res = [];
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
res.push(arr[i]);
}
return res;
}
var arr1 = [1,2,3,5,4,6,1,2,4,7];
console.log(unique(arr1));//(7) [3, 5, 6, 1, 2, 4, 7]
~~~
## 方法二
>[info]【**原理**】:
利用splice直接在原数组进行操作
双层循环,外层循环元素,内层循环时比较值
值相同时,则删去这个值
~~~
function unique2(arr){
for(i = 0; i < arr.length; i++){
for(j = i + 1; j < arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
var arr1 = [1,2,3,5,4,6,1,2,4,7];
console.log(unique2(arr1));//(7) [1, 2, 3, 5, 4, 6, 7]
~~~
## 方法三
>[info]【**原理**】:
运用递归的思想
先排序,然后从最后开始比较,遇到相同,则删除
~~~
function unique3(arr){
arr.sort(function(a,b){//对数组进行排序才能方便比较
return a-b;
});
function loop(index){
if(index >=1){
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
loop(index-1);
}
}
loop(arr.length-1);
return arr;
}
var arr1 = [1,2,3,5,4,6,1,2,4,7];
console.log(unique3(arr1));//(7) [1, 2, 3, 4, 5, 6, 7]
~~~
## 方法四
>[info]【**原理**】:
>利用indexOf以及forEach
~~~
function unique4(arr){
var res = [];
arr.forEach(function(v, i ,arr){
var bool = arr.indexOf(v,i+1);
if(bool === -1){
res.push(v);
}
})
return res;
}
var arr1 = [1,2,3,5,4,6,1,2,4,7];
console.log(unique4(arr1));//(7) [3, 5, 6, 1, 2, 4, 7]
~~~
## 方法五
>[info]【**原理**】:
>利用ES6的set
~~~
function unique5(arr){
return Array.from(new Set(arr));
}
var arr1 = [1,2,3,5,4,6,1,2,4,7];
console.log(unique5(arr1));//(7) [1, 2, 3, 5, 4, 6, 7]
~~~