JS数组去重的10种方法

var arr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN',0,0,'a','a',{},{}]
  1. 利用 Set(ES6中最常用)
    function useSet(arr){
      return Array.from(new Set(arr))
    }

     

  2. 利用 for 嵌套 for,然后 splice(ES5中最常用)
    复制代码
    function useSplice(arr){
      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--;
                }
            }  
        }  
    }                
    复制代码

     

  3. 利用 indexOf
    function useIndexof(arr){var array=[];
      for(var i=0;i<arr.length;i++){
          if(array.indexOf(arr[i])===-1){
               array.push(arr[i])  
            }
        }
          return array;
    }        

     

  4. 利用 sort
    复制代码
    function useSort(arr){
      arr=arr.sort()
      var array=[arr[0]]
      for(var i=1;i<arr.length;i++){
        if(arr[i]!==arr[i-1]){
          arr.push(arr[i]); 
       }
      }  
      return array;
    }    
    复制代码

     

  5. 利用 includes
    复制代码
    function useIncludes(arr){
      var array=[];
      for(var i=0;i<arr.length;i++){
          if(!array.includes(arr[i])){
             array.push(arr[i]); 
          }       
        }    
       return array;
    }
    复制代码

     

  6. 利用 hasOwnProperty
    function useHasOwnProperty(arr){
      var obj={};
      return arr.filter(function(item,index,arr){
        return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]=true)
      })
    }

     

  7. 利用 filter
    function useFilter(arr){
        return arr.filter(function(item,index,arr){
          return arr.indexOf(item,0)===index;     
        });
    }

     

  8. 利用递归
    复制代码
    function useDigui(arr){
      var array=aa;
      var len=array.length;
      array.sort(function(a,b){
        return a-b;
      })
      function loop(index){
          if(index>=1){
            if(array[index]===array[index-1]){
              array.splice(index,1);
            }
            loop(index-1);
          }
      }
      loop(len-1);
      return array;
    }
      
    复制代码

     

  9. 利用 Map 数据结构
    复制代码
    function useMap(arr){
      let map=new Map();
      let array=new Array();
      for(let i=0;i<arr.length;i++){
        if(map.has(arr[i])){
          map.set(arr[i],true);
        }else{
          map.set(arr[i],false);
          array.push(arr[i]);
        }
      }
      return array;
    }
    复制代码

     

  10. 利用 reduce+includes
    function useReduce(arr){
      return arr.reduce((prev,cur)=>prev.includes(cur)?prev:[...prev,cur],[]);  
    }

     

最终输出:[1,"true",true,15,false,undefined,null,NaN,"NaN",0,"a",{},{}]

 

posted @   yhstsy  阅读(825)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示