教你数组去重的思路以及方法~

①不产生新数组的方法
  思路:将该数组的某个元素(这里命名为变量x)与该素组所有元素比对,若有重复,则获取该元素在数组中的地址,然后删除该元素!
  如何获取该元素的地址?
  变量x的地址就是重复的元素的地址!例如,a[4]与数组a所有元素对比,若a[4]前面已经出现过相同的元素,那么a[4],就是一个重复的元素,他的地址就是4!为什么呢?别忘了,他们是一个数组!
  

let a = [1,2,5,7,4,2,1,3,5];
for(let i = 0,len=a.length;i < len;i++){
    let num = 0;
    a.forEach((v,index)=>{
//将该数组中的某元素(这里记为元素x)与该数组所有元素进行比对
        if(v==a[i]){
//若有元素相等,那么num++
            num++;
//若num>1,那么代表着某个元素出现的频率大于一次,即重复!
            if(num > 1){
//获取事件a在该数组中所在的位置index,然后在数组中删除该元素
                a.splice(index,1);
            }
        }
    });
}

②产生新数组
方法一:
思路:将该数组的存放入一个新数组中,若新数组中已有元素,将不存入。这里可以用for循环来和新数组中的元素对比,检测新数组是否已有元素。

let b = [];    //创建新数组来存放不重复的数据
for(let i = 0,len = a.length;i < len;i++){
//判断新数组是否为空,为空就直接将a[0]添加进去
    if(!b[0]){
        b.push(a[i]);
    }else{
//判断该元素是否重复的标志
    let state = true;
    b.forEach((v,index)=>{
        if(v==a[i]){    
//如果重复,state=false
                state = false;
            }
        });
        if(state==true){
//如果state==false,那么代表着数据重复,不会加入新数组中;
//如果state==true,那么代表着数据不重复
            b.push(a[i]);
        }
    }
}

方法二:
这种方法适合于元素是数字的情况下!
思路:将该元素的值作为新数组的键值,若keyArr[oldArr[i]]不存在,那么附个值给他并将arr[i]存放入新数组newArr中,若存在,那么证明该元素oldArr[i]重复,不存入newArr数组!

function oSort(arr){
            var result = [];
             var newArr=[];
            for(var i in arr){
//如果result数组中的第arr[i]个位置没有元素,则令该位置值为1,并且将arr[i]放进新数组中
//相反,如果该位置有元素了,那么证明arr[i]是重复的元素,不必放入数组中
                if(!result[arr[i]]){
                    newArr.push(arr[i]) //这里也可以替换为arr.splice(i,1);删除元素,这样子就可以不用到newArr数组                                                                                               
                    result[arr[i]]=1
                }
            }
            return newArr;    //若使用删除元素的方法,这里相应的改成arr
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值