js 数组去重方法

时间:2022-03-28 22:01:53

1.数组递归去重

运用递归的思想

先排序,然后从最后开始比较,遇到相同,则删除

Array.prototype.distinct = function (){
var arr = this,
len
= arr.length;
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函数进行去重
}
}
loop(len
-1);
return arr;
};
var a = [1,2,3,4,4,3,2];
var b = a.distinct();
console.log(b.toString());
//1,2,3,4

2.双层循环,外层循环元素,内层循环时比较值

如果有相同的值则跳过,不相同则push进数组

Array.prototype.distinct = function(){
var arr = this,
result
= [],
i,
j,
len
= arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j
= ++i;
}
}
result.push(arr[i]);
}
return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();
//返回[3,4,2,1]

3.利用indexOf以及forEach

Array.prototype.distinct = function (){
var arr = this,
result
= [],
len
= arr.length;
arr.forEach(
function(v, i ,arr){ //这里利用map,filter方法也可以实现
var bool = arr.indexOf(v,i+1); //从传入参数的下一个索引值开始寻找是否存在重复
if(bool === -1){
result.push(v);
}
})
return result;
};
var a = [1,1,1,1,2,2,2,2,2,2,3,,3,3,2,3,3,2,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString());
//1,23,2,3

4.利用ES6的set

function dedupe(array){
return Array.from(new Set(array));
}
dedupe([
1,1,2,3]) //[1,2,3]