如何统计数组中字符串的字符出现次数?
如何正确统计数组中字符串的字符出现次数?
原代码的问题分析
你的代码逻辑存在几个核心问题,导致输出不符合预期:
- 匹配逻辑错误:你拿字符串的第
i位字符和字母表的第i位字符对比,完全偏离统计需求——比如"academy"中第二个a在索引5的位置,此时字母表第5位是f,根本无法匹配,自然统计不到重复的a。 - 计数逻辑错误:每次匹配到字符就输出然后把
count重置为0,无法累计同一个字符的出现次数。 - 字母表拼写错误:定义的
alph少了字母w,会导致后续字母无法匹配。 - 函数无返回值:最后
console.log(sumChar(...))输出undefined是因为函数没有返回任何内容。
正确实现方案
下面提供两种简洁可靠的实现方式,都能满足你的需求:
方法一:使用普通对象统计
function sumChar(arr) { // 初始化空对象存储字符计数 const charCount = {}; // 遍历数组中的每个字符串 for (const str of arr) { // 遍历当前字符串的每个字符 for (const char of str) { // 累计字符出现次数:存在则+1,不存在则初始化为1 charCount[char] = (charCount[char] || 0) + 1; } } // 按字符顺序输出结果(不需要排序可直接遍历对象) Object.keys(charCount).sort().forEach(char => { console.log(`${char}:${charCount[char]}`); }); } sumChar(["academy"]);
方法二:使用Map统计(更适合有序场景)
function sumChar(arr) { const charCount = new Map(); for (const str of arr) { for (const char of str) { // Map内置方法判断字符是否存在,累计计数 charCount.set(char, (charCount.get(char) || 0) + 1); } } // 按字符排序后输出 Array.from(charCount.keys()).sort().forEach(char => { console.log(`${char}:${charCount.get(char)}`); }); } sumChar(["academy"]);
输出结果
运行上述代码后,会得到你期望的输出:
a:2 c:1 d:1 e:1 m:1 y:1
内容的提问来源于stack exchange,提问作者Abdulloh Mominov
相关产品推荐
相关产品推荐

