首页 > 技术文章 > 数组去重的四种方法

zcsmile 2019-06-10 14:17 原文

  • 方法一:先给数组排序,循环比较前后两个是否相等,如果相等就删除索引是i的这个,然后i--

      <script>	
      			var arr = ['a', 'd', 'f', 'f', 's', 'f', 'a', 'd', 'f', 'f', 's', 'f','g'];
      			function norepeat(arr){
                  arr.sort();
                  //先排序让大概相同的在一个位置,这里为什么说是大概相同 是因为sort排序是把元素当字				  符串排序的 它和可能排成 1 1 10 11 2 20 3 
                  for(var i = 0; i < arr.length-1;i++){
                  //还是两两比较 一样删除后面的
                      if(arr[i]==arr[i+1]){
                          arr.splice(i,1);
                          //i-- 和j--同理
                          i--;
                      }
                  }
                  return arr;
      		}
      		norepeat(arr);
      </script>
    
  • 方法二 用一个空数组去存首次出现(indexOf)的元素

      <script>	
      			var arr = ['a', 'd', 'f', 'f', 's', 'f', 'a', 'd', 'f', 'f', 's', 'f','g'];
              	function noRepeat2(arr){
          var newArr = [];
          for(var i = 0; i < arr.length; i++){
             if(newArr.indexOf(arr[i]) == -1){//newArr中没有该元素就把该元素放到新数组中去
                    newArr.push(arr[i]);
               }
          }
          return newArr;
      }
      	console.log(noRepeat2(arr));
      </script>
    
  • 方法三 循环比较如果相等的让后面的元素值为0 最后在输出的时候删除为0的

      <script>	
      			var arr = ['a', 'd', 'f', 'f', 's', 'f', 'a', 'd', 'f', 'f', 's', 'f','g'];
             	var newArr = [];
      //控制外循环
      for(var i=0; i<arr.length-1;i++){
          //内存循环 只比较后面的
          for(j=i+1;j<arr.length;j++){
              //如果相等就让其值等于0
              if(arr[i]==arr[j]){
                  arr[j]=0;
              }
          }
          //去除值为0的
          if(arr[i]==0){
              continue;
          }else{
              //放入新的数组
              newArr.push(arr[i]);
          	}
      	}   
      </script>
    
  • 方法四:正则表达式去重

      <script>	
              var arr = ['a', 'd', 'f', 'f', 's', 'f', 'a', 'd', 'f', 'f', 's', 'f','g'];
          var str = arr.sort().join('');//先把所有相同元素放在一起
          console.log(str);//aaddffffffgss
          var newStr = str.replace(/(.).*\1/g,"$1");
          console.log(newStr);//adfgs 
      </script>

推荐阅读