1.ES6 set去重
function uniq(arr){
var a=new Set(arr);
var b=[...a];
return b
}
var aa = [1,2,1,4,3,3,2,4,6,7,7,7,7,7,7,7,7];
console.log(uniq(aa));
2.indexOf去重
function uniq(arr){
var temp = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){
if(temp.indexOf(arr[i]) == -1){ //建议用includes(ES6)
temp.push(arr[i]);
}
}
return temp;
}
var aa = [1,2,2,4,9];
console.log(uniq(aa));
3.利用对象做第二个容器(有点像方法2)
function uniq(arr){
var res = [];
var obj = {};
for(var i=0; i<arr.length; i++){
if (!obj[arr[i]]) {
obj[arr[i]] = 1;
res.push(arr[i])
}
}
return res;
}
4.利用对象键不重复的特性(有点绕)
function uniq(arr){
var res = [];
var obj = {};
for(var i=0; i<arr.length; i++){
obj[arr[i]] = 1;
}
for(var j in obj){
if(isNaN(j)==false){
var a = Number(j);
res.push(a)
}
else{
res.push(j)
}
}
return res;
}
var aa = [1,2,1,4,3,3,2,4,6,7,7,7,7,7,7,7,7,"a","a","a"];
console.log(uniq(aa));
5.先排序后判断后面一个和前面一个相等不
function uniq(arr){
arr.sort();
for(var i= 0;i <arr.length;i++){
if(arr[i]==arr[i-1]){
arr.splice(i,1);
i--;//splice以后数组会改变减少一个i也要减少
}
}
return arr
}
var aa = [1,2,2,4,3,3,2,4,6];
console.log(uniq(aa));
6.双循坏 (效率低)
function uniq(arr){
for(var j=0;j<arr.length;j++)
for(var i= j+1;i <arr.length;i++){
if(arr[j]==arr[i]){
arr.splice(j,1);
i--;
j--;
}
}
return arr
}