JS数组去重的多种方法
解决方案:
1、依次拿出数组中的每一项(排除最后一项,最后一项后面没有需要比较的内容)
2、和当前拿出项后面的每一项依次比较
3、如果发现有重复的,我们把找到的这个重复向在原有数组中删除掉
方案一:双重for 循环
var ary = [1,2,3,2,2,7,9,2,3,5,2,8]
for(var i =0; i<ary.length-1;i++){
for(var j=i+1;j<ary.length-1;j++){
if(ary[i]===ary[j]){
ary.splice(j,1) //第一个等同于第二个,splice方法删除第二个
j--; //因为splice会导致索引进一,从而导致数组塌陷
}
}
}
//但这种方法占用的内存较高,效率也是最低的
方案二:利用sort()
首先使用 sort() 将数组进行排序
然后比较相邻元素是否相等,从而排除重复项
var ary = [1,2,3,2,2,7,9,2,3,5,2,8];
ary = ary.sort();
var newary = [ary[0]]; //第一位首先给它赋值因为第一位不放循环里面
for(var i=1; i<ary.length;i++){
if(ary[i] !== ary[i+1]){
newary.push(ary[i])
}
}
方案三:new Set()
ES6 新增了 Set 这一数据结构,类似于数组,但 Set 的成员具有唯一性
基于这一特性,就非常适合用来做数组去重了
var ary = [1,2,3,2,2,7,9,2,3,5,2,8];
Array.from(new Set(ary))
方案四:利用递归去重
function unique(arr) {
var array= arr;
var len = array.length;
array.sort(function(a,b){ //排序后更加方便去重
return a - b;
})
function loop(index){
if(index >= 1){
if(array[index] === array[index-1]){
array.splice(index,1);
}
loop(index - 1); //递归loop,然后数组去重
}
}
loop(len-1);
return array;
}
var ary = [1,2,3,2,2,7,9,2,3,5,2,8];
console.log(unique(ary ))
方案五:利用对象的属性不能相同的特点进行去重
var ary = [1,2,3,2,2,7,9,2,3,5,2,8];
var obj = { }; //创建一个空对象
for(var i=0;i<ary.length;i++){
var item = obj[i]
if(!obj[item]){
ary[i] === ary[ary.length-1]
ary.length--;
i--;
continue;
}
obj[item] = item;
}