【问题标题】:Basic and Simple Explanation of This Javascript code此 Javascript 代码的基本和简单说明
【发布时间】:2021-09-24 07:05:12
【问题描述】:

我是 Web 开发新手,目前正在处理 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');

我正在尝试编写代码来打印句子中的元音,而不是计算它们。

请帮忙!

【问题讨论】:

  • 所以它对初学者不好..它迭代元音(错误,因为它取决于数组项的数量)然后计算句子中有多少个(但句子可以更长比数组计数,所以这些数字没有多大意义。)
  • 为此使用regular expressions

标签: javascript html css node.js arrays


【解决方案1】:

我正在尝试编写代码来打印句子中的元音,而不是计算它们。

为此,您应该遍历句子本身的字符,然后查看该字符是否在元音数组中。

function countVowels(sentence) {
  let vowelsInSentence = [];
  let counts = 0;
  for(let i = 0; i < sentence.length; i++) {
    if(vowels.includes(sentence[i]) && !vowelsInSentence.includes(sentence[i])) {
      vowelsInSentence.push(sentence[i]);
    }
  }
  return console.log(vowelsInSentence);
}

您也可以通过强制使用所有字符 toLowerCase 来删除一半的数组。

注意:我没有对此进行测试,但它应该添加所有找到的唯一元音,将它们添加到列表中,然后打印出来。

注意 注意:有更有效的方法可以做到这一点,但一些阅读和玩耍会更好地学习。

【讨论】:

    【解决方案2】:

    您要解决的问题是“如何在字符串中找到所有符合条件的符号(元音)”

    正如@Pogrindis 在他们的评论中提到的,你的 for 循环是不正确的。它遍历元音数组['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'] 并检查句子中位置i 处的符号是否是元音。

    考虑这个逐步浏览代码: 0. 定义数组vowels 0. 定义函数countVowels

    1. 调用countVowels("Hello World')步入函数
    2. sentence === 'Hello World'
    3. for(let i=0; i&lt;vowels.length; i++) 请注意,元音是定义在顶部的数组,因此循环将对其进行迭代。 vowels.length == 10 while sentence.length === 11 所以这个循环永远不会到达Hello World 的最后一个符号(如果字符串更长,也可以想象一下)
    4. if(vowels.includes(sentence[i])) 检查位置 i 的符号(第一次迭代时为 0,所以 H)是否在 vowels 数组中(不是,所以 false
    5. for 循环继续 i 然后是 1、2、3、4、5、6、7、8 和 9
    6. i 为1、4 和7 时,count 增加,因为vowels.includes(sentence[i]) 为真。
    7. 最后当for循环结束时(虽然从未检查最后一个字母),函数返回,但它返回console.log函数调用的返回值——即undefined

    要获得句子中的所有元音,您至少需要进行两次调整:

    1. 遍历句子,而不是元音数组,以便您始终检查其中的所有字母。
    2. 您需要将它们打印出来,而不是计算元音。我建议您实际上将它们全部收集到数组中 - 这样就可以轻松计算它们并打印它们。
    const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
    
    function getVowels(sentence) {
        let vowelsInSentence = [];
        for (let i = 0; i < sentence.length; i++) { // iterate over `sentence`
            if (vowels.includes(sentence[i])) {
                vowelsInSentence.push(sentence[i]);
            }
        }
        return vowelsInSentence; // it is better to return a value, this way code which calls the function can decide what to do with the result
    }
    
    console.log(getVowels('Hello World'));
    console.log(getVowels('AaEeIiOoUu'));
    console.log(getVowels('aaaaa'));
    

    这是相同代码的更高级版本:

    const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']); // set is more efficient data structure for lookups
    
    function getVowels(sentence) {
        return sentence
                .split('') // this returns an array of all the letters in a string, i.e. ['H', 'e','l','l','o',' ','W','o','r','l','d']
                .filter(letter => vowels.has(letter)); // this checks every element of an array to match a condition and returns an array of all elements where the check returned `false`
    }
    
    console.log(getVowels('Hello World'));
    console.log(getVowels('AaEeIiOoUu'));
    console.log(getVowels('aaaaa'));
    
    

    【讨论】:

      【解决方案3】:

      你的代码

      1. 创建一个元音数组。

      2. 您有一个函数可以计算作为参数给出的句子中的元音(尽管您应该循环遍历句子,而不是其他海报指出的数组)。

      3. 你正在记录计数。

      这里还有其他答案可以帮助您更正代码,但这里有一个替代方法。

      match 使用a regular expression 对元音的字符串。 match 将返回一个数组,然后您可以将其 join 向上转换为一个新字符串。

      function getVowels(sentence) {
        return sentence.match(/[aeiou]/gi).join('');
      }
      
      console.log(getVowels('Hello World'));
      console.log(getVowels('AaEeIiOoUu'));
      console.log(getVowels('aaaaa'));

      【讨论】:

        【解决方案4】:

        如果您有兴趣打印已传递句子中的所有元音,只需将您的 countVowel 函数更改为

        function printVowels(sentence) {
          for(let i = 0; i < sentence.length; i++) {
            if(vowels.includes(sentence[i])) {
              console.log(sentence[i]);
            }
          }
        }
        

        此代码将打印传递给 printVowel 函数的句子中存在的所有元音。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-12
          • 1970-01-01
          相关资源
          最近更新 更多