我正在尝试使用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不太熟悉,无法实现这一目标。
任何帮助将不胜感激!
答案 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);
}