我有两个输入,一个是我选择一个字母,另一个是我说这些字母出现中有多少要拼接。现在我只能删除我从输入框中选择的所有字母,但我希望能够设置我可以删除的相同字母的项目数。
例如:
我有一个类似下面的数组,我想只删除第一个" 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);
}
答案 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('');
}
注意:在您提供的示例中,您向后循环,但您的问题是删除第一次出现,而不是最后一次出现。我听了你提出的问题。