JS陣列去重的10種方法

yhstsy發表於2024-03-07
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",{},{}]

相關文章