一、利用普通方式实现
//JavaScript输出一个字符串中出现次数最多的字符
function strMax(str) {
var obj = {}; //保存每个字符出现的次数( key:字符,value:出现的次数 )
var returnValue = {}; //返回值:最大字符和出现次数
var values = []; //保存每个字符出现的次数
if (typeof str !== 'string') { //如果传入的参数不是字符串,返回"";
return "";
}
for (var i = 0; i < str.length; i++) { //循环每个字符串里的每个字符
var value = str[i];
if (!obj[value]) { //如果当前obj对象里没有这个字符属性
obj[value] = 1; //添加这个属性,并为这个属性赋值为1
} else {
obj[value]++; //如果当前obj对象里存在这个字符属性,则value值+1
}
}
for (var item in obj) { //遍历添加字符属性后的对象属性
values.push(obj[item]); //把字符出现的字数加入数组
}
values.sort(function(value1, value2) { //从大到小排序数组
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1;
} else {
return 0;
}
});
var maxNum = values[0]; //获取数组第一个value值 如:5
for (var item in obj) { //重新遍历对象属性
if (obj[item] === maxNum) { //如果对象属性的值等于maxNum
var maxValue = item; //获取属性赋值给maxValue
}
}
if (!returnValue[maxValue]) { //如果returnValue对象没有maxValue属性
returnValue[maxValue] = maxNum; //则添加,并赋值maxNum。
}
return returnValue; //返回returnValue对象
};
这个JavaScript函数没有做到如果出现的次数相同的字符,就全部输出。只实现了单个输出。
二、利用正则表达式来实现
//使用正则表达式判断
function strMax1( str ){
var maxShow = {count:0,value:""}; //保存最大字符出现的次数( key:字符,value:出现的次数 )
var regs,tempStr,tempCount; //正则匹配,临时最大字符,临时最大字符出现次数
for (var i = 0;i<str.length;i++) {
regs = new RegExp(str[i],"g");
//使用正则表达式匹配返回结果的个数
tempStr = str.match(regs);
if ( tempStr ){ //如果有数据
tempCount = tempStr.length; //获取最大字符出现次数
if( tempCount > maxShow.count ){ //如果当前获取的字符串长度大于已经保存的字符串长度,则替换。
maxShow.count = tempCount;
maxShow.value = str[i];
}
}
}
return maxShow;
};