新手编写countVowels统计元音函数出错,求for循环版本修复方法
问题分析与修复方案
你的for循环版本代码核心问题出在提前return上,这会导致函数在第一次循环时就直接终止,完全没法遍历整个字符串统计所有元音:
- 循环内部的两个
return语句是致命错误:不管第一个字符是不是元音,执行到return就会直接退出函数,后面的字符根本没机会被检查。 return count++的写法逻辑混乱——即使找到元音,你直接返回了当前的count值(后置递增是先返回再自增),然后直接退出函数,根本没法实现累加统计。
修复后的代码
let arr = ['a','e','o','i','u','U','I','O','E','A'] function countVowels(word){ let count = 0 for (let i = 0 ; i < word.length; i++){ let letter = word[i] if (arr.includes(letter)){ count++ // 找到元音只做累加,不要提前return } // 此处不能写return,否则第一次循环就会终止函数 } // 遍历完所有字符后,再返回最终统计结果 return count }
可选优化方案
可以把元音集合改成Set提升查找效率(数组includes是线性查找,Set的has是O(1)),还能统一转小写/大写来简化元音集合:
const vowels = new Set(['a','e','i','o','u']) function countVowels(word){ let count = 0 for (let letter of word){ // 统一转小写,无需同时存储大小写元音 if (vowels.has(letter.toLowerCase())){ count++ } } return count }
内容的提问来源于stack exchange,提问作者Nour
相关产品推荐
相关产品推荐

