判断一个字符串出现次数最多的字符,并输出其次数
这篇文章发布于 2020/08/30,归类于 JavaScript
标签:
reduce使用场景,js 判断一个字符串出现次数最多的字符
在js处理数组时,有一个reduce方法是比较实用的,特别是计算字符串出现次数的时候。下面来逐步介绍,怎么用js写一个函数,显示判断一个字符串出现次数最多的字符,并输出其次数
let str = "ababadectwestsfdadsfb"
console.log(getMostChar(str))
function getMostChar(str) {
}
思路:我们先实现获取字符串中每个字符出现的次数
function getCharCount(str) {
// 先把字符串切分为数组
return str.split('').reduce((result, item) => {
if (result[item] === undefined) {
result[item] = 1
} else {
result[item]++
}
return result
}, {})
}
上面的例子中,使用了Array.prototype.reduce,如果不知道reduce执行情况,就需要好好看下mdn的文档了,上面的代码其实等价于下面的代码,可以看到reduce使用第二参数时,
function getCharCount(str) {
// 先把字符串切分为数组
let result = {}
str.split('').forEach(item => {
if (result[item] === undefined) {
result[item] = 1
} else {
result[item]++
}
})
return result
}
执行下这个函数
console.log('每个字符串出现的次数', JSON.stringify(getCharCount(str)))
// {"a":4,"b":3,"d":3,"e":2,"c":1,"t":2,"w":1,"s":3,"f":2}
根据上面的例子,我们再来思考怎么获取出现次数最多的字符,其实在reduce里面每次的result我们可以获取到当前字符、以及其出现的次数。我们可以用一个变量来存储出现次数最多的字符,每次遍历是都与这个变量进行比较就可以了
let str = "ababadectwestsfdadsfb"
function getMostChar(str) {
// 先把字符串切分为数组
let mostChar = {
count: 0,
char: ''
}
let charCountObj = str.split('').reduce((result, item) => {
if (result[item] === undefined) {
result[item] = 1
} else {
result[item]++
}
if (result[item] > mostChar.count) {
mostChar.count = result[item]
mostChar.char = item
}
return result
}, {})
return {
mostChar, // 出现次数最多的字符
charCountObj, // 字符串中所有字符出现的次数
}
}
上面的例子中mostChar输出了出现次数最多的字符以及其次数,那问题来了,如果字符串是 "aabbcc",那出现最多次数的字符就不只一个了,可能会是数组。我们需要对上面的例子再进行一些增强,如下
// 主要是修改当前字符和出现次数最多的字符相等的情况
if (result[item] > mostChar.count) {
mostChar.count = result[item]
mostChar.char = item
} else if (result[item] === mostChar.count) {
if (typeof mostChar.char === 'string') {
mostChar.char = [mostChar.char, item]
} else {
mostChar.char.push(item)
}
}
以上就是完整实现了,完整demo参见:判断一个字符串出现最多的字符 | github