1. 程式人生 > >js常會問的問題:找出字符串中出現次數最多的字符。

js常會問的問題:找出字符串中出現次數最多的字符。

spl object 16px 說明 最大數 bsp 賦值 out 數列

一、循環obj

let testStr = ‘asdasddsfdsfadsfdghdadsdfdgdasd‘;
        function getMax(str) {
            let obj = {};
            for(let i in str) {
                if(obj[str[i]]) {
                    obj[str[i]]++;
                }else{
                    obj[str[i]] = 1;
                }
            }
            let keys 
= Object.keys(obj); // 獲取對象中所有key的值返回數組 let values = Object.values(obj); // 獲取所有value返回數組 let maxVal = Math.max(...values);// Math.max可以找出傳入參數的最大值,如:Math.max(1,2);這裏可使用es6中的解構,
        也可以使用Math.max.apply(Math,values)可認為是apply(Math.max, arr)
        然後,arr是一個參數列表,對於max方法,其參數是若幹個數,即Math.max(a, b, c, d, ...)
console.log(keys[values.indexOf(maxVal)],maxVal); } getMax(testStr); // obj值:{a: 5, s: 7, d: 12, f: 4, g: 2, h: 1, s: 7,}

keys[values.indexOf(maxVal)] => value裏面最大的數字的位置,最大數字位置對應的key。
maxVal最大的數,也就是出現做多的次數。
str[i]是對應字符串中的第i個字符,
obj[str[i]] 就是對應的每個字母
for循環就是
把裏面出現了的字母作為obj這個對象的key,然後循環的時候判斷obj裏面有沒有以str[i]為key的對象,如有,就把它的value加一,說明這個字母在obj中出現的次數多了一次;剛開始i是鍵名,str[i]是鍵值,用這個鍵值再做obj的鍵名,然後賦值,或累加

eg:
obj[str[i]] = 1;  =>  var obj={};obj.aa = 1;console.log(obj)

二、正則
let stringMax = (str) => {
            str = str.split(‘‘).sort().join(‘‘);
            var s = str.match(/(\w+)(\1)/g);
            if(s === null) {
                return str[0];
            }
            s = s.map(e => e=e+e[0]);
            var out = s.sort((a,b) =>b.length - a.length);
            console.log(out[0][0],out[0].length);
        };
        stringMax(testStr)

 

js常會問的問題:找出字符串中出現次數最多的字符。