JavaScript - 从数组中删除相同的出现

时间:2015-09-02 20:05:34

标签: javascript arrays splice find-occurrences

我有两个输入,一个是我选择一个字母,另一个是我说这些字母出现中有多少要拼接。现在我只能删除我从输入框中选择的所有字母,但我希望能够设置我可以删除的相同字母的项目数。

例如:

我有一个类似下面的数组,我想只删除第一个" a"。如果我在输入中输入1,它应该这样做。如果我把2,那么它应该删除第一个和第二个" a"来自阵列。

看起来很简单,但我无法想出一个解决方案来设置我想要删除的数量。

var letters = ["a","b","c","a"];

function deleteLetter() {
    var valChosenLetter = document.getElementById("chosen-letter").value;
    var valHowManyToDelete = document.getElementById("how-many-to-delete").value;

    for (var i = letters.length -1; i >= 0; i--) {
        if(letters[i] == valChosenLetter)
        {
            letters.splice(i, 1);
        }
    };
    console.log(letters);
}

我是手动完成的,但这不是解决方案:

var letters = ["a","b","c","a"];

function deleteLetter() {
    var valChosenLetter = document.getElementById("chosen-letter").value;
    var valHowManyToDelete = document.getElementById("how-many-to-delete").value;

    for (var i = letters.length -1; i >= 0; i--) {
        if(letters[i] == valChosenLetter)
        {
            if(valHowManyToDelete < 2)
            {
                letters.splice(i, 1);
                break;
            }
            else
            {
                letters.splice(i, 1);
            }
        }
    };
    console.log(letters);
}

2 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

letters = letters.filter(function (val) {
    if (val === valChosenLetter && howManyToDelete > 0) {
        howManyToDelete -= 1;
        return false;
    }
    return true;
});

因此,您每次只需将howManyToDelete减少一次,只需删除它仍为正数的频率。此外,您可以使用filter使代码更紧凑。

答案 1 :(得分:0)

这应该可以工作:

function deleteLetter( letters, letter, number ) {
    var removed = 0;
    return letters
        .filter(function(char) {
            if ( removed < number && char == letter ) {
                ++removed;
                return false;
            }
            return true;
        })
        .join('');
}

注意:在您提供的示例中,您向后循环,但您的问题是删除第一次出现,而不是最后一次出现。我听了你提出的问题。