★最原始的數組去重的方法:利用for循環,if判斷語句,數組中的兩個方法indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=[]; for(var i=0;i<arr.length;i++){ //判斷arr[i]第一次出現的位置跟-1是否相等,若是不等說明重複了,若是等於-1,說明不存在,須要添加到newArr中 //例如:i=1,此時arr[i]=2,而arr.indexOf(2)沒有存在過,因此他的下標是-1,執行if語句中,反之不進入if語句 if(newArr.indexOf(arr[i])==-1){ newArr.push(arr[i]) } } console.log(newArr);
★利用for循環,if判斷語句,數組中的兩個方法indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=[]; for(var i=0;i<arr.length;i++){ //判斷arr[i]第一次出現的位置跟當前i是否相等,若是不等說明重複了,不進入if語句中 //例如:i=6,此時arr[i]=4,而arr.indexOf(4)第一次出現的下標是3,因此3≠6,不進入if語句裏邊,直接執行i++ if(arr.indexOf(arr[i])==i){ newArr.push(arr[i]) } } console.log(newArr);
★實現原理:先將原數組arr進行排序,相同的元素緊挨着存放,並將arr中的第一項存入新數組中,for循環遍歷arr, 判斷arr中的每一項是否在newArr中存在,若是不存在執行if語句,由於一開始將arr中第一項存入了newArr中, 因此遍歷arr時直接從下標爲1的項開始遍歷 var arr=[1,2,3,4,5,4,3,2,1]; arr.sort();//將數組排序 var newArr=[arr[0]]; for(var i=1;i<arr.length;i++){ if(arr[i]!==newArr[newArr.length-1]){ newArr.push(arr[i]) } } console.log(newArr);
★實現原理:外層for循環下標從0開始遍歷數組,內層循環下標從外層循環+1開始遍歷數組, 判斷數組中前一項和後一項是否相等,若是相等用splice()方法刪除重複的那一項,而且將內存循環下標減1 var arr=[1,2,3,4,5,4,3,2,1]; 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--; } } } console.log(arr);
★用了數組的三個方法reduce()、indexOf()和push(); var arr=[1,2,3,4,5,4,3,2,1]; var newArr=arr.reduce(function(prev,cur){ prev.indexOf(cur)===-1&&prev.push(cur); return prev; },[]); console.log(newArr);
★給原型添加方法,而後繼承1 Array.prototype.uniquel=function(){ var res=[this[0]]; for(var i=1;i<this.length;i++){ var flag=false;//假設一開始沒有重複的 for(var j=0;j<res.length;j++){ if(this[i]==res[j]){ flag=true;//進入if語句,說明有重複項 break; } } if(!flag){ res.push(this[i]) } } return res; } var arr=[1,2,3,4,5,4,3,2,1]; console.log(arr.uniquel());
★給原型添加方法,而後繼承2 Array.prototype.unique2=function(){ var res=[]; var json={}; for(var i=0;i<this.length;i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]]=1; } } return res; } var arr=[1,2,3,4,5,4,3,2,1]; console.log(arr.unique2());