2010-09-07 57 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>