数组去重
1、ES6的Set方法
function unique(arr){ return Array.from(new Set(arr)) } console.log(unique([1,1,2,2,3,3,4,4])) //[1,2,3,4]
2、最常用使用for循环
function unique(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 }
unique([1,1,2,2,3,3,4,4]) //[1,2,3,4]
3、利用indexOf方法
function unique(arr){ var temp = []; for(var i = 0; i < arr.length; i++){ if(temp.indexOf(arr[i]) === -1){ temp.push(arr[i]) } } return temp } console.log(unique([1,1,2,2,3,3,4,4])) //[1,2,3,4]
4、利用sort方法
function unique(arr){ 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 } unique([1,2,3,4,1,2,3,4]) //[1,2,3,4]
5、ES6的includes方法
function unique(arr){ var array = []; for(var i = 0; i < arr.length; i++){ if(!array.includes(arr[i])){ array.push(arr[i]) } } return array } unique([1,1,2,2,3,3,4,4]) //[1,2,3,4]
6、利用对象属性不能相同的特点(如果单纯把数组值作为属性名,则不会校验数据类型,所以稍加改进)
function unique(arr) { let obj = {}; return arr.filter((item)=>{ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } unique([1,2,3,4,5,1,2,3,4])
7、filter+indexOf
function unique(arr) { return arr.filter((item,index)=>{ return arr.indexOf(item, 0) == index }) } unique([1,2,3,4,5,1,2,3])
8、reduce+indexOf
function unique(arr) { return arr.reduce((total, item)=>{ return total.includes(item) ? total : [...total, item] }, []) } unique([1,2,3,4,5,1,2,3,4])