繁体   English   中英

我需要使用循环找出数组的每个字符串中有多少个元音字母。 看不出我做错了什么

[英]I need to find how many vowels are in each string of the array using loops. Can't see what I'm doing wrong

因此,对于一项课程任务,我需要遍历一系列水果,找出一个单词中有多少元音和辅音。 对于它说我需要使用 for-in、for 循环和 case-switch 或 nested-if 语句的任务。 这是我的代码:

 const fruits = ["Apple", "Orange", "Banana", "Pear", "Peach", "Strawberry", "Cherry", "Acai"]; for (let fruit in fruits) { var vowels = 0; var consonants = 0; for (var i = 0; i < fruit.length; i++) { switch (fruits[fruit][i]) { case "A": case "E": case "I": case "O": case "U": case "a": case "e": case "i": case "o": case "u": vowels = vowels + 1; break; default: consonants = vowels + 1; break; } } } console.log(`Apple has ${vowels} vowels and ${consonants} consonants`);

我是 JS 的新手,我似乎看不出我做错了什么。

需要注意的一件事是for-in用于对象,而 as for-each用于 arrays。虽然看起来您需要为这个特定的位使用特定的函数,但我想我会指出这一点以备将来使用。

您实际上对代码所做的是将数组中的每个元素设置为 object。例如,每个变量变为:

0:"Apple", 1:"Orange", ...

所以如果我们遍历,每个fruit的长度都是 1。

你问题的答案是看看你如何创建你的 for 循环与你如何创建你的 switch case 相比。 你真正想要的不是fruit的长度,而是fruits[fruit]的长度,如果这有意义的话。 例如:

for (var i = 0; i < fruits[fruit].length; i++) {
      switch (fruits[fruit][i]){
        ...
      }
}

--

我可以看到的另一个问题是您跟踪常量的方式。 您可能不应该将常量更新为constants = VOWELS +1

--

我注意到的最后一件事是你最后的console.log实际上不会输出关于苹果的信息,它实际上会输出关于fruits数组中最后一个水果的信息(即Acai

一个可能的解决方案是使用正则表达式。

  1. 首先你匹配元音
  2. 使用 output 您可以动态生成正则表达式。
  3. 然后你可以从字符串中删除元音以获得辅音。
const regex = /([aeiou])/gi;
    
const fruits = ["Apple", "Orange", "Banana", "Pear", "Peach", "Strawberry", "Cherry", "Acai"];
    
const map = fruits.reduce((map, fruit) => {
      const vowels = fruit.match(regex);
      const consonats = fruit.replaceAll(new RegExp(`(${vowels.join("|")})`, "ig"), "");
      map[fruit] = { vowels, consonats: consonats.split("") }
      return map;
    }, {})

console.log({ map });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM