jQuery Javascript数组'包含'功能?

时间:2010-04-06 22:00:00

标签: javascript jquery regex arrays

我正在尝试使用jQuery $.inArray函数来遍历数组,如果有一个元素的文本contains是特定关键字,请删除该元素。 $.inArray仅返回数组索引,但元素的文本是关键字的equal

例如,给定以下名为'tokens'的数组:

-   tokens  {...}   Object
    [0] "Starbucks^25^http://somelink"  String
    [1] "McDonalds^34^" String
    [2] "BurgerKing^31^https://www.somewhere.com"   String

调用removeElement(tokens, 'McDonalds');会返回以下数组:

 -  tokens  {...}   Object
    [0] "Starbucks^25^http://somelink"  String
    [1] "BurgerKing^31^https://www.somewhere.com"   String

我猜这可能是使用jQuery $.grep$.each函数,或者regex。但是,我对jQuery不太熟悉,无法实现这一目标。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

grep确实是要走的路。

function removeElement(array, keyword) {
    return $.grep(array, function (item, i) {
      return item.indexOf(keyword) > -1;
  }, true);
}

这会将关键字作为子字符串查找。如果数组的元素具有特定的格式(它们看起来如此,但未明确说明),请更改测试以匹配格式。

function removeElement(array, keyword) {
    var keyRE=new RegExp('^'+keyword+'^');
    return $.grep(array, function (item, i) {
      return keyRE.test(item);
  }, true);
}

注意第一个'^'是一个匹配字符串开头的元字符;第二个只是匹配一个'^'字符。

答案 1 :(得分:0)

编辑 oops我完全误解了这个问题。

$.grep采用“反转”标志,因此您可以直接使用它:

var pattern = /\bword\b/;
var newArray = $.grep(oldArray, function(e) { return pattern.test(e); }, true);

当然,现在我考虑一下,我可以保存5个字符:

var newArray = $.grep(oldArray, function(e) { return !pattern.test(e); });

答案 2 :(得分:0)

这应该是清楚的。从tokens参数中删除包含search参数中传入的字符串的所有元素。使用filter()

function removeElement(tokens, search) {
    var regex = new RegExp(search);
    return $(tokens).filter(function() {
        return !regex.test(this);
    }).toArray();
}

如果需要,还可以为正则表达式指定标志

e.g。

var regex = new RegExp(search, "i");

将删除包含忽略大小写的搜索字符串的所有元素


$.grep版本的代码

function removeElement(tokens, search) {
    var regex = new RegExp(search);
    return $.grep(tokens, function(elem, ind) {
        return regex.test(elem);
    }, true);
}