【问题标题】:Why are consecutive vowels skipped?为什么会跳过连续的元音?
【发布时间】:2019-12-04 15:37:41
【问题描述】:

我有以下 JS 函数,它从字符串中删除元音并将其输出到控制台。

对于输入字符串“quickbrownfox”,函数会跳过连续的 u 和 i 元音,有人可以指出逻辑错误。

function vowels(s) {
  var arr = [...s];
  for (var i = 0; i < arr.length; i++) {
    var x = arr[i];
    switch (x) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
        var out = arr.splice(i, 1);
        console.log(out[0]);
    }
  }
}
  vowels("quickbrownfox")

【问题讨论】:

  • 当你拼接出一个字符时,你改变了索引的有效含义(i)。如果你在找到每个元音时从i 中减去 1,它会起作用。
  • 或者复制字符串

标签: javascript arrays switch-statement


【解决方案1】:

修复这个功能只需要两个字符 改变这个:

var out = arr.splice(i, 1);

到这里:

var out = arr.splice(i--, 1);

【讨论】:

    【解决方案2】:

    不要拼接数组,直接记录值即可。

    function vowels(s) {
      var arr = [...s];
      for (var i = 0; i < arr.length; i++) {
        var x = arr[i];
        switch (x) {
          case 'a':
          case 'e':
          case 'i':
          case 'o':
          case 'u':
            // var out = arr.splice(i, 1);
            console.log(arr[i]);
        }
      }
    }
      vowels("quickbrownfox")

    【讨论】:

      【解决方案3】:

      您的拼接正在改变数组,从而弄乱了循环

      只是过滤它

      const vowels = "aeiou"
      const getVowels = s => [...s].filter(letter => vowels.includes(letter))
      console.log(
        getVowels("quickbrownfox")
      )  

      【讨论】:

        【解决方案4】:

        无需使用var out = arr.splice(i, 1);

        function vowels(s) {
        var arr=[...s];
        for(var i=0; i<arr.length;i++)
        {
            var x=arr[i];
            switch(x)
            {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                    console.log(x);
            }
        }
        }
        console.log(vowels('quickbrownfox'))

        【讨论】:

          【解决方案5】:

          迭代 s 而不是 arr 并分配 var x = s[i] 而不是 var x = arr[i]

          【讨论】:

            猜你喜欢
            • 2020-10-14
            • 1970-01-01
            • 2016-08-22
            • 2021-05-22
            • 2017-11-10
            • 2015-02-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多