三種方法實現算出字串中出現多字元

王東煜發表於2019-09-27
//第一種一般方法
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
function getMore(str){
//把字串的每一項當做屬性名存起來
//儲存之前 先看 物件中有沒有這個屬性,沒有就給obj增加一個屬性 屬性值是1
//沒有的話 就在 他現在的  值基礎上 加1
    let obj = {};
    for(let i =0;i<str.length;i++){
        let t = str[i];
        if(obj.hasOwnProprperty(t){
            obj[t] += 1;
        } else{
            obj[t] = 1;
        }
    }
    let key = '',num = 0;
    for(var k in obj){
        if(obj[k] >num){
            key = k;
            num = obj[k]
        }
    }
    return{
        key,
        num
    }
}
console.log(getMore(str))
//{key: "d", num: 9} //{n: "d", m: 9}
//第二種 match捕獲
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
function getMore2(str){
//先獲取鄉轉為陣列的字串aadddddddddeffffffgggghrssssss
    str = str.split('').sort().join('');
    let reg = /(\w)\1*/g
    var arr = str.match(reg);
    //獲取相同字元組成的陣列
    arr.sort((a,b) =>{
        return b.length - a.length
        //降序  第一項就是想要的
    })
    return{
        key:arr[0][0],
        num:arr[0].length
    }
}
console.log(getMore2(str))//{key: "d", num: 9}

//第三種方法replace實現
var str = 'asdfghasdfgfgersdfsdfgfdsdddsd';
        function getMore3(str) {
            str = str.split('').sort().join('');//
            let reg = /(\w)\1*/g;
         let key = '',num = 0;
         str.replace(reg,function(a,b){
         //a是大正則dddddddddd
         //b是第一個分組裡的內容d
             if(a.length >num){
                 num = a.length;
                 key = b;
             }
         })
         return{
             key,
             num  
         }
        }
        console.log(getMore3(str))//{key: "d", num: 9}
複製程式碼

相關文章