1、双层循环
Array.prototype.dist = function(){ var arr = this; var len = arr.length; var result = []; for(var i = 0;i<len;i++){ for(var j = i+1 ; j< len;j++){ if(arr[i] === arr[j]){ j = ++i; }
result.push(arr[i]);
}
}
return result;
}
2、利用splice直接操作原数组
Array.prototype.dist = function(){
var arr = this;
var len = arr.length;
for(var i=0;i<len;i++){
for(var j=i+1; j<len;j++){
if(arr[j] === arr[i]){
arr.splice(j,1);
j--;
len--;
}
}
}
return arr; }
3、数组递归去重,先进行排序,后比较
Array.prototype.dist = function(){ var arr = this;
var len = arr.length;
arr.sort(function(a,b){
return a - b;
});
function arrloop(index){
if(index > 1) {
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
}
arrloop(index-1);
}
arrloop(len-1);
return arr;
}
4、利用indexOf和forEach实现
Array.prototype.dist = function(){
var arr = this;
var result = [];
arr.forEach(function(element,index,arr){
if(arr.indexOf(element,index+1) === -1){//从数组的下一个开始寻找
result.push(element);
}
});
return arr; }
5、利用es6中的set,类似于数组,其成员都是唯一的
Array.prototype.dist = function(){
var arr = this; return Array.from(new set(arr));//Array.from也是es6中的用法 }