1. 利用hasOwnProperty 判断是否存在对象属性
function unique(array){ var obj = {}; return array.filter(function(item,index,array){ return obj.hasOwnProperty(typeof item+item) ? false : (obj[typeof item+item]=true) }) } var array = [1,2,1,20]; console.log(unique(array)) // 1 2 20
2 利用filter
function unique(array){ return array.filter(function(item,index,array){ //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return array.indexOf(item,0) === index }) } var array = [1,2,3,1,2,3,4] console.log(unique(array)) // 1 2 3 4
3 利用递归去重
function unique(arr){ var array = arr; 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,然后数组去重 } } loop(len-1); return array; } var array = [1,2,4,1,2,4]; console.log(unique(array)) // 1 2 4
4. 利用Map数据结构去重
function unique(arr){ let map = new Map(); let array = new Array();//数组用于返回结果 for(let i = 0;i<arr.length;i++){ if(map.has(arr[i])){ //如果有该key值 map.set(arr[i],true); }else{ map.set(arr[i],false);//如果没有该值 array.push(arr[i]) } } return array; } var arr = [1,4,7,1,4,7]; console.log(unique(arr)) // 1 4 7