JS数组去重的10种方法
var arr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN',0,0,'a','a',{},{}]
- 利用 Set(ES6中最常用)
function useSet(arr){ return Array.from(new Set(arr)) }
- 利用 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--; } } } }
- 利用 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; }
- 利用 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; }
- 利用 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; }
- 利用 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) }) }
- 利用 filter
function useFilter(arr){ return arr.filter(function(item,index,arr){ return arr.indexOf(item,0)===index; }); }
- 利用递归
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; }
- 利用 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; }
- 利用 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",{},{}]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步