JS陣列去重的三種方法
阿新 • • 發佈:2022-05-03
在程式中,通常解決一個問題的方法有很多種。當然這些不同思路的解決方法,在效能和效率上也有很大差異。
以下是數字去重的三種方法,
一、迴圈遍歷法(傳統思路)
最簡單粗暴的演算法,新建一個空陣列,然後遍歷原陣列,將不在新陣列中的項新增到新陣列,最後返回新陣列
function compare(arr){ var newarr=[];//新建空陣列 for(var i=0; i<arr.length;i++){//遍歷原陣列 var isadd=true;//設定標記 for(var j=0; j<newarr.length;j++){//遍歷新陣列 if(arr[i]===newarr[j]){isadd=false;break;}//如果當前原陣列中的項,在新陣列中存在,則標記為‘不新增’,並跳出新陣列遍歷 } if(isadd){newarr.push(arr[i]);}//若標記為‘新增’(即遍歷新陣列後,沒有發現相同項),則新增進新陣列 } return newarr;//返回新陣列 }
二、排序比較法(巧妙轉換)
相對第一種方法,需要每次遍歷新舊兩個陣列,效率不高的情況。此方法先對原陣列進行排序,這樣每次只要與新陣列的最後一項比較即可,大大提高效率
function sortarr(arr){ var arrsort=arr.sort();//對原陣列進行排序 var newarr=[];//新建空陣列 newarr.push(arrsort[0]);//將排序後數值的第一項給新增到新陣列 for(var i=1;i<arrsort.length;i++){//遍歷排序後的陣列 if(arrsort[i]!==newarr[newarr.length-1]){newarr.push(arrsort[i])}//若當前項與新陣列最後一項不同,這新增到新陣列 } return newarr;//返回新陣列 }
三、物件屬性法(另闢新徑)
相對前兩種方法通過比較的方式,此方法主要利用了物件屬性(key值)不可重複的特性,將陣列中各項賦值給一個新物件,重複將自動覆蓋。最後從物件上遍歷出屬性即可。
function attribute(arr){ var obj={};//新建空物件 var newarr=[];//新建空陣列 for(var i=0; i<arr.length;i++){obj[arr[i]]=null;}//將原陣列項作為物件的key進行賦值 for( var attr in obj){newarr.push(Math.floor(attr));}//遍歷物件,取出key值新增到新陣列 return newarr;//返回新陣列 }