数组去重

★最原始的数组去重的方法:利用for循环,if判断语句,数组中的两个方法indexOf()和push();
var arr=[1,2,3,4,5,4,3,2,1];
var newArr=[];
for(var i=0;i<arr.length;i++){
    //判断arr[i]第一次出现的位置跟-1是否相等,如果不等说明重复了,如果等于-1,说明不存在,需要添加到newArr中
    //例如:i=1,此时arr[i]=2,而arr.indexOf(2)没有存在过,所以他的下标是-1,执行if语句中,反之不进入if语句
    if(newArr.indexOf(arr[i])==-1){
        newArr.push(arr[i])
    }
}
console.log(newArr);

  

★利用for循环,if判断语句,数组中的两个方法indexOf()和push();
var arr=[1,2,3,4,5,4,3,2,1];
var newArr=[];
for(var i=0;i<arr.length;i++){
    //判断arr[i]第一次出现的位置跟当前i是否相等,如果不等说明重复了,不进入if语句中
    //例如:i=6,此时arr[i]=4,而arr.indexOf(4)第一次出现的下标是3,所以3≠6,不进入if语句里边,直接执行i++
    if(arr.indexOf(arr[i])==i){
        newArr.push(arr[i])
    }
}
console.log(newArr);

  

★实现原理:先将原数组arr进行排序,相同的元素紧挨着存放,并将arr中的第一项存入新数组中,for循环遍历arr,
判断arr中的每一项是否在newArr中存在,如果不存在执行if语句,因为一开始将arr中第一项存入了newArr中,
所以遍历arr时直接从下标为1的项开始遍历
var arr=[1,2,3,4,5,4,3,2,1];
arr.sort();//将数组排序
var newArr=[arr[0]];
for(var i=1;i<arr.length;i++){
    if(arr[i]!==newArr[newArr.length-1]){
        newArr.push(arr[i])
    }
}
console.log(newArr);

  

★实现原理:外层for循环下标从0开始遍历数组,内层循环下标从外层循环+1开始遍历数组,
判断数组中前一项和后一项是否相等,如果相等用splice()方法删除重复的那一项,并且将内存循环下标减1
var arr=[1,2,3,4,5,4,3,2,1];
for(var i=0;i<arr.length;i++){
    for(var j=i+1;j<arr.length;j++){
        if(arr[i]==arr[j]){
            arr.splice(j,1);
            j--;
        }
    }
}
console.log(arr);

  

★用了数组的三个方法reduce()、indexOf()和push();
var arr=[1,2,3,4,5,4,3,2,1];
var newArr=arr.reduce(function(prev,cur){
    prev.indexOf(cur)===-1&&prev.push(cur);
    return prev;
},[]);
console.log(newArr);

  

★给原型添加方法,然后继承1
Array.prototype.uniquel=function(){
    var res=[this[0]];
    for(var i=1;i<this.length;i++){
        var flag=false;//假设一开始没有重复的
        for(var j=0;j<res.length;j++){
            if(this[i]==res[j]){
                flag=true;//进入if语句,说明有重复项
                break;
            }
        }
        if(!flag){
            res.push(this[i])
        }
    }
    return res;
 }
 var arr=[1,2,3,4,5,4,3,2,1];
console.log(arr.uniquel());

  

★给原型添加方法,然后继承2
Array.prototype.unique2=function(){
    var res=[];
    var json={};
    for(var i=0;i<this.length;i++){
        if(!json[this[i]]){
          res.push(this[i]);
          json[this[i]]=1;  
        }
    }
    return res;
}
var arr=[1,2,3,4,5,4,3,2,1];
console.log(arr.unique2());

  

posted @ 2019-06-25 10:00  lixiaoxue1  阅读(131)  评论(0编辑  收藏  举报