如何计算字符串中有多少辅音?

Mil*_*vic 4 javascript

我在解决方案附近吗?我总是得到双倍数量的辅音.

我确信这是正确的做法.

function consonants(str) {
  var countConsonants = 0;

  for (var i = 0; i <= str.length; i++) {

    if (str[i] !== "a" || str[i] !== "e" || str[i] !== "i" ||
      str[i] !== "o" || str[i] !== "u" || str[i] !== " ") {
      countConsonants += 1;
    }
  }
  return (countConsonants);
}
consonants("asdfghaaa");
Run Code Online (Sandbox Code Playgroud)

我期待5的答案,即sdfgh辅音.

Zak*_*rki 5

你的逻辑是有缺陷的,你的条件中的运算符应该是AND &&而不是OR ||,因为你想比较所有的chars而不仅仅是其中一个:

function consonants(str) {
  var countConsonants = 0;

  for (var i = 0; i < str.length; i++) {

    if (str[i] !== "a" && str[i] !== "e" && str[i] !== "i" &&
      str[i] !== "o" && str[i] !== "u" && str[i] !== " ") {
      countConsonants++;
    }
  }
  return (countConsonants);
}
console.log(consonants("asdfghaaa"));
Run Code Online (Sandbox Code Playgroud)

注意:循环应该停止,length-1因为数组是基于0的,所以替换:

for (var i = 0; i <= str.length; i++) {
__________________^^
Run Code Online (Sandbox Code Playgroud)

通过:

for (var i = 0; i < str.length; i++) {
__________________^
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


小智 2

计数的主要问题在于您的条件。

每当其中一个条件失败时,您就会增加辅音的数量(这就是||所谓的 OR 运算符)。因此,每当一个字符!== "a"OR时!== "e",您都会增加计数,这是错误的。(假设 a 是!== 'e',所以你将 a 算作辅音)。

||二元运算符改为&&(AND);这样,只要当前字符出现,您就只会增加辅音计数str[i]不在您正在验证的值(a、e、i、o、u、' ')中,您就只会增加辅音计数。

正如其他人指出的那样,您也可能会遇到错误,因为 i 的最大值应该是 Length-1。

您还需要考虑其他问题:

  • 当字符是大写字母时会发生什么?
  • 当字符是标点符号或数字时会发生什么?

对于初学者来说,这可能不相关,但非常值得了解这些技术:创建一个包含您正在验证的所有值的数组 [“a”,“e”等] 更具可读性然后,对于源字符串中的每个字符,只需验证 array.indexOf(str[i]) >= 0 (这意味着该字符包含在数组中)。