You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hackerrank题:JS分离打印字符串元音辅音时辅音无法输出

问题背景

完成Hackerrank平台的字符串分类题目:要求识别给定字符串中的元音、辅音,保持原有字符顺序,将两类字符分别逐行打印。现有代码可以正常输出所有元音,但辅音始终无法正常打印,原代码如下:

const vowels = 'aeiou'

var consonants = []
for (var i=0;i<s.length;i++) {
    if(vowels.includes(s[i])) {console.log(s[i])
    } 
    else {
        consonants+= s[i] + '\n'
    }
 
} 

}
错误原因
  • 最核心的问题是辅音收集完成后没有执行输出操作:所有辅音字符被拼接到consonants变量后,循环结束逻辑就直接终止了,没有调用打印方法输出变量中存储的辅音内容,这是看不到辅音输出的根本原因。
  • 变量使用不规范:初始将consonants声明为数组类型,后续却使用+=运算符做字符串拼接,JS虽然不会抛出语法错误,但这种跨类型操作很容易引发非预期的逻辑问题。
  • 额外隐患:现有判断逻辑只匹配小写元音,如果输入包含大写AEIOU会被错误判定为辅音,如果题目要求不区分大小写识别元音,需要补充转换逻辑。
修正方案

方案1:保持原有收集逻辑,补充输出步骤

把consonants直接声明为字符串类型,循环结束后统一打印收集到的内容即可:

const vowels = 'aeiou'
let consonants = '' // 声明为字符串类型,避免类型混用
for (let i = 0; i < s.length; i++) {
    // 如果需要不区分大小写判断元音,就用s[i].toLowerCase()做匹配,不需要就直接用s[i]
    if (vowels.includes(s[i].toLowerCase())) {
        console.log(s[i])
    } else {
        // 如果题目要求排除空格、标点等非字母字符,可以在这里加正则判断过滤
        consonants += s[i] + '\n'
    }
}
// 补充打印逻辑,trim用来去掉最后多余的换行符
console.log(consonants.trim())

方案2:简化逻辑,无需额外存储变量

不需要单独存辅音,判断为辅音时直接逐行打印即可,代码更简洁:

const vowels = 'aeiou'
for (let i = 0; i < s.length; i++) {
    const curChar = s[i].toLowerCase()
    if (vowels.includes(curChar)) {
        console.log(s[i])
    } else {
        // 按需加非字母过滤逻辑
        console.log(s[i])
    }
}

内容的提问来源于stack exchange,提问作者Süleyman Eminbəyli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:57:27