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

     

  • 相关阅读:
    C# asp:Repeater DataSource List<T>
    MySQL DATE_FORMATE函数内置字符集的坑_转小叶子爹
    MySQL count(distinct) 逻辑的一个bug
    org.hibernate.PersistentObjectException: detached entity passed to persist:
    CGLIB Enhancement failed
    firstResult/maxResults specified on polymorphic query;
    Last packet sent to the server was 0 ms ago.
    MySql Error Code: 2006 – MySQl
    InnoDB: Error: auto-extending data file ./ibdata1 is of a different size
    mysql 大数据量分页处理
  • 原文地址:https://www.cnblogs.com/yaya-003/p/12687797.html
Copyright © 2011-2022 走看看