编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其重复次数。写得好像比较复杂,大家有更好的方法欢迎留言指导,谢谢。
function compare(string, n) {
var array = [], countArr = [], sortArr = [], unique = [], rank = 0;
// 找出string里的字符有哪些
for (var i = 0; i < string.length; i++) {
if (array.indexOf(string[i]) == -1) {
array.push(string[i]);
}
}
// 统计每个字符出现次数
for (var j = 0; j < string.length; j++) {
if (array.indexOf(string[j]) > -1) {
if (!countArr[string[j]] ){
countArr[string[j]] = 0;
}
countArr[string[j]] += 1;
}
}
// 将出现次数倒序排序
for (item in countArr) {
sortArr.push(countArr[item]);
}
sortArr.sort(function(a, b) {return b - a;});
// 倒序排序后,前三个就是出现最多的三个
for (var k = 0; k <= n-1; k++) {
for (item1 in countArr) {
if (sortArr[k] == countArr[item1]) {
rank += 1;//排名
// 防止重复显示结果
if (unique.indexOf(item1) == -1) {
unique.push(item1);
console.log('第' + rank + '名是' + item1 + ',出现次数为' + sortArr[k]);
}
}
}
}
}
compare("kkkaaallaaalkkcsljbnn", 3);
运行结果如下: