数组中的几个去重方法

165 阅读1分钟
var ary=[1,2,3,4,5,1,2,3,1]

####双for去重


function unique1(arr){
    for(var i=0;i<arr.length;i++){
        var temp=arr[i];//创建一个新变量,和arr里面的变量做对比
        for(var j=i+1;j<arr.length;j++){//创建一个循环使循环变量轮流做对比
            if(temp===arr[j]){//创建一个条件进行筛选,如果值相同的话
                arr.splice(j,1)//从第j项开始删除一个
                j--
            }
        }
    }
    return arr
}  //这个可以改变原有的数组


//对象去重

function unique2(arr){
    //利用对象的属性名不能重复
    //把数组中的每一项当做对象的属性名出巡到对象中
    var obj={};
    arr.forEach((v)=>{
        obj[v]=v
    }) //假如v现在代表的是1,给obj增加一个属性名是1属性值也是1的一个键值对
    console.log(obj);
   // 把对象中的键值对 拿出了,放在新数组中,然后把新数组返回;
   var a=[];
   for(var k in obj){
       a.push(obj[k])
   }
   return a
}
var res=unique2(ary)
console.log(res,ary)

//利用indexof 和 lastindexof去重

function unique3(arr){
    //若indexof和lastindexof得到的值不一样,说明后边有重复的项
    for(var i=0;i<arr.length;i++){//创建一个循环进行筛选里面的值
        var n=arr.indexof(arr[i])  //创建一个变量把 
        m=arr.lastindexof(arr[i]);//再次创建一个变量,把最后一个值的序号赋给她,
        if(n !==m){//创建条件进行对比
            arr.splice(m,1);//n和m不同,说明索引为m的项为重复项,需要我们删除掉,删除之后 我们仍然需要用当前的arr[i]接着去查看  是否还有重复
            i--;
        }
    }
    return arr
}
var res4=unique3;
console.log(res4,ary)