2015-09-02 39 views
0

我有兩個輸入,一個是我選擇一個字母的地方,另一個是我說要拼接多少個字母出現的地方。現在我只能刪除從輸入框中選擇的所有信件,但我希望能夠設置我可以刪除的同一信件的數量。JavaScript - 從數組中刪除相同的出現

例如:

我有類似下面的陣列,我想只刪除所述第一「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

怎麼是這樣的:

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

所以你就減少一howManyToDelete每一次,只是刪除作爲往往因爲它仍然是積極的。此外,您可以使用filter來使您的代碼更緊湊。

+0

'return!(val === valChosenLetter && howManyToDelete - )' –

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(''); 
} 

注:在您提供的例子,你向後循環,但你的問題是,除去第一個分身,不是最後一次。我跟着你問的問題。

相關問題