数组去重
利用对象的属性不能相同的特点进行去重
Array.prototype.distinct = function (){
var [arr, i, obj, result, len] = [this, null, {}, [], arr.length];
for(i=0; i<len; i++) {
if(!obj[arr[i]]) {
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
}
数组递归去重
先排序,然后从最后开始比较,遇到相同,则删除
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;
};
利用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;
};
利用ES6的set
Set数据结构,其成员的值都是唯一的
- 利用Array.from将Set结构转化成数组
Array.from(new Set(array))
- 拓展运算符(...)内部使用for...of循环
[...new Set(array)]
网友评论