JavaScript数组去重方法总结

Posted on 2020-06-12 10:36  猿六毛  阅读(123)  评论(0编辑  收藏  举报

一:[...new Set(arr)]和Array.from(new Set(arr))

  ES6方法,在不考虑兼容的情况下,代码最少。无法去除空对象{}

二:双层for循环嵌套,再利用数组方法splice删除重复项

var unRepeat = function(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--
            }
        }
      }
      return arr
    }

ES5常用方法,利用外层循环元素,内层循环值进行比较,数组方法splice删除相同的那个值(splice方法会修改原数组)

三:数组方法indexof

 

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

 

四:sort排序去重

 

var unRepeat = function(arr){
     var arr = arr.sort()
     var array = [arr[0]]
     for(var i=1; i<arr.length;i++){
       if(arr[i] !== arr[i-1]){
         array.push(arr[i])
      }
     }
      return array
    }

五:利用include方法  (返回boolean值)代码与上述indexof相似

六:使用hasOwnProperty

var unRepeat = function(arr){
      let obj = {}
      return arr.filter((item,index,arr)=>{
        return obj.hasOwnProperty(typeof item + item) ? false :(obj[typeof item + item] = true) //typeof "wo" + "wo" => "stringwo"
      })
    }

利用hasOwnProperty判断是否有对象属性,再结合filter返回数组。此方法与上述不同的是 能把空对象也去重

七:利用filter和indexof相结合去重

var unRepeat = function(arr){
      return arr.filter((item,index,array) =>{
        return array.indexOf(item,0) == index
      })
    }