zoukankan      html  css  js  c++  java
  • js数组去重的几种方法

    假定现有数组:var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];,如何去除重复的元素并返回?[1,23,3,5,6,7,9,8]

    1.将数组的每一个元素依次与其他元素做比较,发现重复元素,利用数组方法splice()删除重复元素

      var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
       function norepeat(arr) {
           for(var i = 0; i < arr.length-1; i++){
               for(var j = i+1; j < arr.length; j++){
                   if(arr[i]==arr[j]){
                       arr.splice(j,1); 
                       j--;
                   }
               }
           }
           return arr;
       }
       var arr2 = norepeat(arr);
       console.log(arr2);    //[1, 23, 3, 5, 6, 7, 9, 8]

    2.使用双层循环改变原数组

       var arr = [1,1,2,2,3,3,4,4,5,5,4,3,1,2,6,6,6,6];
         console.log(arr); 
       function norepeat(arr){
           for(var i=0;i<arr.length;i++){
               for(var j=0;j<arr.length;j++){
                    if(arr[i] == arr[j] && i !=j){
                        arr.splice(j,1);
                    }
                }
            }
            return arr;
        }   
        var arr2=norepeat(arr);
        console.log(arr2);  //[1, 2, 3, 4, 5, 6]

    3.借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序)

       var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
            console.log(arr); 
            function norepeat(arr){
                var temp=[];
                var end;       //临时变量用于对比重复元素
                arr.sort();
                end=arr[0];
                temp.push(arr[0]);
                for(var i=1;i<arr.length;i++){
                    if(arr[i] !=end){   //当前元素如果和临时元素不等则将此元素添加到新数组中
                        temp.push(arr[i])
                        end=arr[i]
                    }
                }
                return temp;
            }
        var arr2=norepeat(arr);
        console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]

    4.创建一个新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中

     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
            console.log(arr); 
            function norepeat(arr){
                var temp =[];
                for(var i=0;i<arr.length;i++){
                    if(temp.indexOf(arr[i]) == -1){
                        temp.push(arr[i]);
                    }
                }
                return temp;
            }
        var arr2=norepeat(arr);
        console.log(arr2);//[1, 23, 3, 5, 6, 7, 9, 8]

    5.借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等

    var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
       console.log(arr);    
       function norepeat(arr) {
           for (var i = 0; i < arr.length; i++) {
               if (arr.indexOf(arr[i]) != i) {
                   arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
                   i--;//数组下标回退
               }
           }
           return arr;
       }
       var arr2 = norepeat(arr);
       console.log(arr2);                 //[1, 23, 3, 5, 6, 7, 9, 8]

    6.创建一个新数组 通过indexOf方判断当前元素在数组中的索引如果与循环的下标相等则添加到新数组中

      var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
       console.log(arr);
       function norepeat(arr){
           var temp=[];
           for(var i=0;i<arr.length;i++){
               if(arr.indexOf(arr[i]) == i){
                   temp.push(arr[i]);
               }
           }
           return temp;
       }
       var arr2=norepeat(arr);
       console.log(arr2);    //[1, 23, 3, 5, 6, 7, 9, 8]

    7.利用数组中的filter方法

      var arr = ["apple","banana","pear","apple","orange","orange"];
       console.log(arr);
       var arr2 =arr.filter(function(value,index,self){
           return self.indexOf(value) ===index;
       });
       console.log(arr2);   //["apple", "banana", "pear", "orange"]

    8.利用空对象来记录新数组中已经存储过的元素

     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
        console.log(arr);
        var obj={};
        var arr2=[];
        for(var i=0;i<arr.length;i++){
            if(!obj[arr[i]]){
                obj[arr[i]]=true;
                arr2.push(arr[i]);
            }
        }
        console.log(arr2);   //[1, 23, 3, 5, 6, 7, 9, 8]
     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
        console.log(arr); 
        function norepeat(arr){
            var temp;
            arr.sort();
            temp=arr[0];
            for(var i=1;i<arr.length;i++){
                if(arr[i]==temp){   //当前元素如果和临时元素相等则将此元素从数组中删除
                    arr.splice(i,1);
                    i--;
                }else{
                    temp=arr[i];
                   }
            }
            return arr;
        }
        var arr2=norepeat(arr);
        console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]

     9.利用set添加时不会将重复的元素添加进去这一特性,for循环遍历数组,将每个元素都添加进set里

        function noRepeat(){
          const arr = [1,2,3,4,5,6,7,2,3,65,46,1,0]
          const set = new Set()
          for(let i = 0;i< arr.length; i++){
            set.add(arr[i])
          }
          return set
        }
        console.log(noRepeat())//Set(10) {1, 2, 3, 4, 5,6,7,65,46,0}

    转载于:https://blog.csdn.net/xing476255461/article/details/100067006

     

  • 相关阅读:
    如何理解python中的if __name__=='main'的作用
    如何在阿里云上部署war包到tomcat服务器
    如何在windows上部署war包到tomcat服务器
    解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错
    python3中的unicode_escape
    python中的excel操作
    python的logging模块
    python中的SMTP发送邮件
    python中的字符串
    一道问题引出的python中可变数据类型与不可变数据类型
  • 原文地址:https://www.cnblogs.com/yaya-003/p/12687797.html
Copyright © 2011-2022 走看看