找出數組中出現次數最多的元素


最近朋友面試,看到一題面試題給大家分享一下。

題目是:一個長度為10000左右的字符串數組 var = ['aaa','bbb','ccc'...]請寫出一個函數計算出現次數最多的字符串。

如果僅僅是用普通遍歷來做的話就很不優雅了。因為數組長度是10000左右

在網上看到了這樣一種方法 挺棒的。

 function more(arr) {
        let max=null;//定義一個用來存儲出現次數最多的元素
        let num=1;//定義一個用來存儲最出現的次數
         arr.reduce((p,k)=>{ //對該數組進行reduce遍歷
             p[k]?p[k]++:p[k]=1;
                 if(p[k]>num){
                     num=p[k]
                     max=k
                 }
                 return p
        },{})
        return {max:max,num:num}//返回最多元素對象
    }

 要搞明白這個方法,首先要明白數組的reduce方法:

   

 這個方法的思路是把整個數組轉化為一個偽數組對象:元素和出現的次數以鍵值對的方式存儲。

   reduce的第二個參數是傳遞給函數的初始值,第一個參數是一個函數。那么此方法中第一次將{}傳遞給了p參數,k參數為當前遍歷的對象相當於Foreach中的item參數

  

最終得到的p對象:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM