尝试使用我自己的字符串方法来删除元音

时间:2014-11-30 13:37:42

标签: javascript jquery

我写过这个函数来从字符串中删除小写元音。此函数不适用于某些字符串。如果字符串有多个同一个元音,则只删除一个元音。 [编辑:抱歉,我放弃在下面的示例中将'y'作为元音包括在内。]感谢您的帮助。

var string = "heelloo world";
var vowel = ["a", "e", "i", "o", "u"];

String.prototype.character = function name() {
    var i;
    for ( i = 0; i < vowel.length; i++) {
        var secondLoop = string.length;
        for ( j = 0; j < secondLoop; j++) {
            if (vowel[i] == string.charAt(j)) {
                string = string.slice(0, j).concat(string.slice(j + 1, secondLoop));
            }

        }
    }
}

string.character();
console.log(string);
//hello wrld

5 个答案:

答案 0 :(得分:3)

当您从字符串中删除字符时,您正在跳过循环中的下一个字符,因为字符串现在缩短了一个字符,但指针(j)仍然指向相同的位置。删除字符时需要递减计数器。

var string = "heelloo world";
var vowel = ["a", "e", "i", "o", "u"];

String.prototype.character = function name() {
    var i;
    for ( i = 0; i < vowel.length; i++) {
        var secondLoop = string.length;
        for ( j = 0; j < secondLoop; j++) {
            if (vowel[i] == string.charAt(j)) {
                string = string.slice(0, j).concat(string.slice(j + 1, secondLoop));
                j--;           // take the removed character into account
                secondLoop--;  // string is now one character shorter
            }

        }
    }
}

string.character();
console.log(string);

也就是说,使用正则表达式来实现相同的东西要容易得多,除非你有令人信服的理由避免它。

var string = "heelloo world";

string = string.replace( /[aeiou]/g, '' );

console.log(string);  // hll wrld

答案 1 :(得分:0)

在代码中,在第二个嵌套循环期间,当循环在下一次迭代时递增时,它已经传递了元音的第二个实例,即循环为2但第二个元音为1.尝试从中减去1循环控制变量secondLoop什么时候连续分裂字符串连接的if条件?

答案 2 :(得分:0)

我认为解决的最佳方法是使用正则表达式替换来执行此操作:

&#13;
&#13;
String.prototype.character = function() {
  return this.replace(/[aeiou]+/g, ''); //replace a, e, i, o and u with nothing.
}

function submit() {
  var input = document.getElementById('input').value;
  document.getElementById('output').innerHTML = input.character();
}
&#13;
<input id="input" type="text" value="eeexaammpleeee">
<div id="output"></div>
<button onclick="submit()">Go!</button>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我只想使用一个好的旧正则表达式     var string =“heelloo world”;     var vowel = [“a”,“e”,“i”,“o”,“u”];

String.prototype.character = function() {
    return this.replace(/[aeiou]/gi, '');
}

console.log(string.character());

答案 4 :(得分:-1)

试试这个:

    var string = "heelloo world";
    var vowel = ["a", "e", "i", "o", "u"];
    var new_string = "";
    var safe = "";

    for (x = 0; x < string.length; x++)
    {
        var removeChar = false;
        for (y = 0; y < vowel.length; y++)
        {
            if (string[x] == vowel[y] && safe != vowel[y])
            {
                if (string[x+1] == vowel[y])
                {
                    safe = vowel[y];
                    removeChar = true;
                }
                else
                safe = "";

                break;
            }
        }
        if (!removeChar)
        {
            new_string += string[x];

            var isVowel = false;
            for (y = 0; y < vowel.length; y++)
            {
                if (string[x] == vowel[y])
                {
                    isVowel = true;
                    break;
                }
            }
            if (!isVowel)
            safe = "";
        }
    }
    alert(new_string);

这将产生“你好世界”。