一:[...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 }) }