相信大家看到这个问题,有可能想到的是类似于以下的答案:
function getmaxObj(str) {
if (str.length == 1) {
return str;
}
var newObj = {};
for (var i = 0; i < str.length; i++) {
if (!newObj[str.charAt(i)])
newObj[str.charAt(i)] = 1;
else
newObj[str.charAt(i)] += 1;
}
console.log(newObj )
var maxObj ={
maxkey :"",
maxvalue:0
}
for (var k in newObj) {
if (newObj[k] > maxObj.maxvalue) {
maxObj.maxvalue = newObj[k];
maxObj.maxkey = k;
}
}
return maxObj;
}
var result =getmaxObj("zhangpeiyue.com");
// 出现最多的字符:e
console.log("出现最多的字符:"+result.maxkey);
// 出现次数:2
console.log("出现次数:"+result.maxvalue);
但是上面程序有一些小小的问题:如果最多的字符串有多个的话,只能统计出第一个字符串。例如我要统计字符串"zhang":
var result =getmaxObj("zhang");
// 出现最多的字符:z
console.log("出现最多的字符:"+result.maxkey);
// 出现次数:1
console.log("出现次数:"+result.maxvalue);
从结果可以看出,只统计出了字符串"z",而其它符合条件的字符串并没有统计出来,所以这样有些不科学。我们可以将代码优化下(不难理解,所以我就不注释啦):
function getmaxObj(str) {
if (str.length == 1) {
return str;
}
var newObj = {};
for (var i = 0; i < str.length; i++) {
if (!newObj[str.charAt(i)])
newObj[str.charAt(i)] = 1;
else
newObj[str.charAt(i)] += 1;
}
console.log(newObj )
var maxObj ={
maxkey :[],
maxvalue:0
}
for (var k in newObj) {
if (newObj[k] > maxObj.maxvalue) {
maxObj.maxvalue = newObj[k];
maxObj.maxkey = [k];
}else if(newObj[k] === maxObj.maxvalue)
maxObj.maxkey.push(k);
}
return maxObj;
}
var result =getmaxObj("zhang");
// 出现最多的字符:z、h、a、n、g
console.log("出现最多的字符:"+result.maxkey.join("、"));
// 出现次数:1
console.log("出现次数:"+result.maxvalue);
欢迎各路大神吐槽!
—————END—————
[公众号回复“电子书”,送你经典前端电子书籍]
喜欢本文的朋友们,欢迎关注微信公众号张培跃,收看更多精彩内容