出字符串中出现次数最多的字符。
⼀、循环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 = duce(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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论