所以我正在开发一个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 ;;
我错过了什么吗?有人可以指导我吗?
答案 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!"));
答案 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
。
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;
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;
var removeVowel = (str) => str.replace(/[aeiou]+/gi, "");
console.log(removeVowel("Cheese!"));
&#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("");
}