JavaScript:如何返回字符串中出现次数最多的多个字符
解决多最高频字符的统计问题
嘿,我懂你现在的困扰——当字符串里有多个出现次数相同的高频字符时,用_.invert()确实会掉链子对吧?毕竟_.invert()反转键值对的时候,如果多个键对应同一个值,只会保留最后一个,直接就把其他高频字符弄丢了。
给你分享个靠谱的解决思路,分三步走就能搞定:
第一步:统计字符频次
先用_.countBy()把每个字符的出现次数统计出来,这一步比自己写循环高效多了:const str = 'javascript prototype'; const charCounts = _.countBy(str); // 结果会是类似 { j:1, a:2, v:1, ..., p:3, t:3 } 的对象第二步:找到最高频次值
从统计结果里提取所有频次数值,用Math.max()找出最大的那个:const maxCount = Math.max(...Object.values(charCounts)); // 这里会得到3,也就是p和t的出现次数第三步:筛选所有最高频字符
遍历统计对象,把所有频次等于maxCount的字符筛选出来:const mostFrequentChars = Object.entries(charCounts) .filter(([char, count]) => count === maxCount) .map(([char]) => char);
把这些步骤合起来,运行后mostFrequentChars就会返回["p", "t"],完美解决你的问题!
另外提个小细节:如果你的字符串里有空格或者其他需要忽略的字符,可以在统计前先处理一下,比如去掉空格:
const processedStr = str.replace(/\s/g, ''); const charCounts = _.countBy(processedStr);
内容的提问来源于stack exchange,提问作者Caleb Taylor
相关产品推荐
相关产品推荐

