元音消除的麻烦

时间:2018-02-10 11:50:04

标签: javascript string

所以我正在开发一个javascript编码挑战,在那里我应该消除字符串中的所有元音,这是我的代码:

function removeVowel(str) {
  var i = 0;
  for (i = 0; i < str.length; i++) {
    if (str[i] === "a" || str[i] === "e" || str[i] === "i" || str[i] === "o" ||
      str[i] === "u" || str[i] === "A" || str[i] === "E" || str[i] === "I" ||
      str[i] === "O" || str[i] === "U") {
      if (i === 0) {
        var temp = str.substr(i + 1, str.length);
        str = temp;
      } else if (i === 1) {
        var temp = str.substr(0, 1) + str.substr(i + 1, str.length);
        str = temp;
      } else if (i === str.length - 1) {
        var temp = str.substr(0, str.length - 2);
        str = temp;
      } else {
        var temp = str.substr(0, i) + str.substr(i + 1, str.length);
        str = temp;
      }
    }
  }
  return str;
}
console.log(removeVowel("Cheese!"));

代码在元音与辅音的情况下工作正常,但在字符串中有连续的元音时无法正常工作。

上述代码的输出是&#34; Ches!&#34 ;;

我错过了什么吗?有人可以指导我吗?

4 个答案:

答案 0 :(得分:2)

假设你没有按照注释所说的那样使用RegEx,你的代码的问题在于你要删除单词中的字母并同时递增i。这样,当你到达'Cheese'中的第一个'e'时,它将删除它并递增i,将你带到新单词'Chese'的's'位置。尝试使用while循环或者只要记住在找到元音时返回一个位置。

答案 1 :(得分:2)

您可以简单地使用正则表达式/[aeiou]+/gi删除所有元音

function removeVowel(str) {
  var str = str.replace(/[aeiou]+/gi, "");
  return str;
}
console.log(removeVowel("ChEese!"));

你可以find the regex explanation here

答案 2 :(得分:1)

您的方法(已修复)

您的方法中的问题:

var temp = str.substr(i + 1, str.length);
           ^
           |_ You're losing the first part of your String (0 -> i), so you're assigning the String (i + 1 -> length).

执行substring函数后,需要递减索引i

&#13;
&#13;
function removeVowel(str) {
  var i = 0;
  for (i = 0; i < str.length; i++) {
    if (str[i] === "a" || str[i] === "e" || str[i] === "i" || str[i] === "o" ||
      str[i] === "u" || str[i] === "A" || str[i] === "E" || str[i] === "I" ||
      str[i] === "O" || str[i] === "U") {
        str = str.substr(0, i) + str.substr(i + 1, str.length);
        i--;
    }
  }
  return str;
}
console.log(removeVowel("Cheese!"));
&#13;
&#13;
&#13;

使用数组

的方法

&#13;
&#13;
function removeVowel(str) {
  var array = str.split('');

  for (var i = 0; i < array.length; i++) {
    var letter = array[i];
    if (letter === "a" || letter === "e" || letter === "i" || letter === "o" ||
      letter === "u" || letter === "A" || letter === "E" || letter === "I" ||
      letter === "O" || letter === "U") {
        array.splice(i, 1);
        i--;
    }
  }
  
  return array.join('');
}
console.log(removeVowel("Cheese!"));
&#13;
&#13;
&#13;

使用正则表达式进行

&#13;
&#13;
var removeVowel = (str) => str.replace(/[aeiou]+/gi, ""); 
console.log(removeVowel("Cheese!"));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

function removeVowel(str)
{
    var vowels = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
    var chars = str.split("");

    return chars.filter(function(char)
    {
        return vowels.indexOf(char) === -1;
    }).join("");

}