zoukankan      html  css  js  c++  java
  • 数组去重

    ★最原始的数组去重的方法:利用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());
    

      

  • 相关阅读:
    整套的操作体系:三点看股法
    [Garmin]安卓版本2.35完美安装程序+地图+JVC+电子眼
    [Garmin]安卓版本2.35完美安装程序+地图+JVC+电子眼
    [凯立德]2015春季版C2739-M7L83-3521JON,已O+带3D+带路况
    [凯立德]2015春季版C2739-M7L83-3521JON,已O+带3D+带路况
    DirectX9:总结篇 异常错误检测
    Linux开发:论ffmpeg的使用
    VS的bug集锦
    牛客:脑筋急转弯的选择题
    剑指Offer:栈的压入/弹出序列
  • 原文地址:https://www.cnblogs.com/lixiaoxue/p/11081103.html
Copyright © 2011-2022 走看看