2010-09-07 55 views
0
陣列刪除元素

所以我有JavaScript陣列會有點像JS:基於正則表達式

  • 螺旋蓋瓶
  • 不可退還瓶馬格南空
  • 潛水[技術。]磁瓶[科技]
  • 牢不可破瓶
  • 潛水
  • 東西(5/5)
  • EINE Flasche austrinken EIN嬰兒麻省理工學院
  • DER FlascheernährenEIN嬰兒麻省理工學院
  • DER FlaschefütternMIT DER Flasche
  • aufziehen

我的問題是元素「東西(5 5)」。基本上,我不想讓它出現在數組中。如果總是一樣的話,這不會是一個大問題,但是數組是動態生成的,並且後面的數字不同於。因此,例如,準時「東西(2之3)」,另一時間「東西(6之6)」等等。第一部分保持不變。

所以我認爲正則表達式可以解決問題,因爲它們實際上是爲了什麼。 所以我砍死在一起,這樣的代碼:

var regExpStuff = /Stuff\b/; 
var array = removeItem(unique, regExpStuff); 

功能的removeItem()看起來是這樣的:

//remove item (string or number) from an array 
    function removeItem(originalArray, itemToRemove) { 
     var j = 0; 
     while (j < originalArray.length) { 
      if (originalArray[j] == itemToRemove) { 
       originalArray.splice(j, 1); 
     } else { j++; } 
    } 
    return originalArray; 
    } 

功能正常工作與簡單的字符串,如「串」,但事實並非如此這條路。
任何想法可能是錯的?幫助非常感謝,

回答

2

當你寫if (originalArray[j] == itemToRemove),你正在檢查originalArray[j]是否等於參數。由於字符串"# Stuff (5 of 5)"不是等於到你的正則表達式(畢竟,它是一個字符串,而不是正則表達式),你不會刪除任何東西。

您需要更改方法來檢查正則表達式。
例如:

function removeMatching(originalArray, regex) { 
    var j = 0; 
    while (j < originalArray.length) { 
     if (regex.test(originalArray[j])) 
      originalArray.splice(j, 1); 
     else 
      j++; 
    } 
    return originalArray; 
} 
+0

真棒,謝謝! – ngmir 2010-09-07 18:19:39

1

這裏是一個圖形化的解決方案,以元素的刪除 我喜歡看到的事情是如何改變

<!DOCTYPE html> 
<html> 
<body> 
<button onclick="myFunction()">Try it</button> 
<p id="demo"></p> 
<script> 
function myFunction() { 
    var fruits= ["Banana", "Orange", "Lemon", "Apple", "Mango"]; 
    for (var i=0;i<fruits.length;i++){ 

    if(fruits[i] == "Lemon"){ //remove Lemon 
     var citrus = fruits.splice(i,1); 
     i--; 
    } 
    if(fruits[i] == "Apple"){ //remove Apple 
     var citrus = fruits.splice(i,1); 
     i--; 
    } 
    document.getElementById("demo").innerHTML = fruits+'<br>'+citrus; 
} 
} 
</script> 
</body> 
</html>