求Javascript元音统计代码通俗讲解及修改为打印元音的实现方法
原代码逐行讲解
const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; function countVowels(sentence) { let counts = 0; for(let i = 0; i < vowels.length; i++) { if(vowels.includes(sentence[i])) { counts++; } } return console.log(counts); } countVowels('Hello World'); countVowels('AaEeIiOoUu'); countVowels('aaaaa');
逐行解释:
- 第1行:
const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
声明了一个常量数组,里面存了所有大小写的英文元音字母,作为后续判断的基准库。 - 第2行:
function countVowels(sentence) {
声明一个名为countVowels的自定义函数,它接收一个参数sentence,也就是你要处理的目标字符串。 - 第3行:
let counts = 0;
函数内部初始化一个计数变量,初始值为0,用来累加统计到的元音个数。 - 第4行:
for(let i = 0; i < vowels.length; i++) {
开启for循环,索引i从0开始,每轮循环i自增1,注意这里原代码有逻辑错误:循环终止条件用了元音数组的长度10,也就是说如果传入的字符串长度超过10,超出部分的字符完全不会被检查。 - 第5行:
if(vowels.includes(sentence[i])) {
判断当前循环到的目标字符串第i位字符,是否存在于元音数组中,也就是判断这个字符是不是元音。 - 第6行:
counts++;
如果上面的判断为真(当前字符是元音),就把计数变量加1。 - 第7、8行:分别是if语句和for循环的闭合花括号,作用是标识对应代码块的结束范围。
- 第9行:
return console.log(counts);
函数执行结束前,把统计到的元音总数打印到控制台,然后终止函数执行。 - 最后3行:分别调用3次countVowels函数,传入三个不同的测试字符串,验证功能。
调整后实现方案(输出所有元音字母)
我们只需要修改两处核心逻辑:1、把计数变量换成存储元音的数组;2、修复原循环长度的错误,改成按传入字符串的长度循环,找到元音就存到数组里最后打印即可。
修改后的完整代码如下:
const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']; function getVowels(sentence) { // 把原来的计数变量改成空数组,用来存找到的元音 let foundVowels = []; // 循环长度改成目标字符串的长度,保证每个字符都被检查到 for(let i = 0; i < sentence.length; i++) { const currentChar = sentence[i]; if(vowels.includes(currentChar)) { // 是元音就推入数组 foundVowels.push(currentChar); } } // 打印所有找到的元音,也可以根据需要改成返回这个数组 console.log(foundVowels); // 如果想要输出字符串形式而非数组,把上面一行替换成:console.log(foundVowels.join('')) } // 测试调用 getVowels('Hello World'); // 输出 ['e', 'o', 'o'],字符串形式输出为 eoo getVowels('AaEeIiOoUu'); // 输出 ['A','a','E','e','I','i','O','o','U','u'] getVowels('aaaaa'); // 输出 ['a','a','a','a','a']
内容的提问来源于stack exchange,提问作者SadWomxn
相关产品推荐
相关产品推荐

