一、循環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,}
// 很牛的reduce方法
var testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd';
var testArray = testStr.split('');
var a = testArray.reduce(function(prev,next){
if(next in prev) {
prev[next]++;
}else {
prev[next] = 1;
}
return prev
},{})
console.log(a)
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)