JS:基于RegExp从数组中删除元素

时间:2010-09-07 17:27:06

标签: javascript arrays

所以我的JavaScript数组有点像

  • 螺旋盖瓶[技术]
  • 不可回收的瓶子空瓶子
  • 潜水磁瓶[技术]
  • 牢不可破的瓶子
  • tank
  • 潜水
  • 东西(5/5)
  • eine Flasche austrinken ein Baby mit
  • derFlascheernähreninbaby Baby
  • derFlaschefütternmitder Flasche
  • aufziehen

我的问题是元素“ Stuff(5 of 5)”。基本上,我不希望它出现在数组中。如果总是相同的话,这将不是一个大问题,但是数组是动态生成的,而后面的数字不同。所以,例如,按时它是“Stuff(2 of 3)”,另一次是“Stuff(6 of 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;
    }

这个函数适用于像“string”这样的简单字符串,但它不是这样的 什么想法可能是错的?非常感谢帮助,

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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>