如何获取字符串数组并对其进行筛选
How do I take an array of strings and filter them?
我在jQuery中有一个字符串数组。我有另一个关键字数组,我想用它来过滤字符串数组。
我的两个阵列:
var arr = new Array("Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio");
var keywords = new Array("Tom", "Ohio");
如何使用jQuery中的keywords
数组筛选arr
数组?在这种情况下,它会过滤掉"Sally在塔可钟工作",并保留其余部分
下面是我正在使用的实际代码。
var keywords= [];
var interval = "";
var pointer = '';
var scroll = document.getElementById("tail_print");
$("#filter_button").click(
function(){
var id = $("#filter_box").val();
if(id == "--Text--" || id == ""){
alert("Please enter text before searching.");
}else{
keywords.push(id);
$("#keywords-row").append("<td><img src='"images/delete.png'" class='"delete_filter'" /> " + id + "</td>");
}
}
);
$(".delete_filter").click(
function(){
($(this)).remove();
}
);
function startTail(){
clearInterval(interval);
interval = setInterval(
function(){
$.getJSON("ajax.php?function=tail&pointer=" + pointer + "&nocache=" + new Date(),
function(data){
pointer = data.pointer;
$("#tail_print").append(data.log);
scroll.scrollTop = scroll.scrollHeight;
});
}, 1000);
}
这样做的全部目的是允许用户过滤日志结果。因此,用户执行一个启动startTail()
的操作,$.getJSON()
检索由PHP函数构建的JSON对象并打印结果。工作完美无瑕。现在我想给用户一个选项来过滤传入的尾随项目。用户单击过滤器按钮,jQuery获取过滤器文本并将其添加到keywords
数组中,然后使用keywords
数组过滤JSON对象中的data.log
,然后将其附加到屏幕上。
我还有一个不起作用的删除过滤器功能。也许有人能帮我。
$.grep( arr, $.proxy(/./.test, new RegExp(keywords.join("|"))));
没有jQuery:
arr.filter(/./.test.bind(new RegExp(keywords.join("|"))));
jQuery对"过滤器"的定义是grep
var arr = ["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"];
var keywords = ["Tom", "Ohio"];
var regex = new RegExp(keywords.join("|"));
result = $.grep(arr, function(s) { return s.match(regex) })
var filtered = [];
var re = new RegExp(keywords.join('|'));
for (var i=0; i<arr.length; i++) {
if (re.search(arr[i])) {
filtered.append(arr[i]);
}
}
更新
由于从jQuery的角度来看,这里有更好的答案,所以我将我的答案修改为普通的JavaScript方法,只适用于那些可能需要在没有jQuery的情况下这样做的人。
头顶,未经测试。作为jQuery插件:
(function($) {
$.foo = function(needle, haystack) {
return $.grep(haystack, function () {
var words = this.split(' '),
flag = false
;
for(var i=0; i < words.length; i++) {
flag = $.inArray(words[i], needle);
if (flag) { break; }
}
return flag;
});
};
})(jQuery);
然后你可以(据说)运行这样的:
var bar = $.foo(keywords, arr);
您可以使用[filter][1]
函数,但无论哪种方式,您都需要在两个数组中循环。您可以使用indexOf
来检查一个字符串是否包含在另一个字符串中。
var arr = ["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"];
var keywords = ["Tom", "Ohio"];
var filtered = [];
for(var i = 0; i < arr.length; i++) {
for(var j = 0; j < keywords.length; j++) {
if (arr[i].indexOf(keywords[j]) > -1) {
filtered.push(arr[i]);
break;
}
}
}
console.log(filtered);
实时示例
使用jQuery强大的功能:
var keywords = ["Tom", "Ohio"];
$(["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"]).filter(function(k, v) {
return v.match("(" + keywords.join("|") + ")");
});
var keywords = ['Tom', 'Ohio'];
var arr = ['Sally works at Taco Bell', 'Tom drives a red car', 'Tom is from Ohio', 'Alex is from Ohio'];
var matcher = new RegExp(keywords.join('|'));
var newarr = [];
$.each(arr, function(index, elem) {
if (elem.match(matcher)) {
newarr.push(elem);
}
});
console.log(newarr);
小提琴:http://jsfiddle.net/LQ92u/1/
相关文章:
- 根据多个值筛选数组
- 使用特定值筛选数组
- 在javascript中按字符串长度筛选数组
- 如何筛选数组数组
- 如何获取输入字段的值并使用它来筛选数组
- 基于键和值的筛选数组
- 对多个选项进行筛选数组以在新选择中返回选项
- AngularJS ngOptions按布尔字段筛选数组
- 使用用户输入的维度,根据每个元素中的字符数筛选数组
- 需要有关创建筛选数组内容的复选框的帮助
- 使用jQuery筛选数组
- 如何使用foreach绑定将select选项中的参数传递给触发器和筛选数组可观测值
- 如何使用jQuery.grep()动态筛选数组
- 数组的严格筛选数组
- 在PHP中使用关键字筛选数组
- 基于javascript中的另一个数组筛选数组
- 基于索引数组筛选数组
- 为提前输入筛选数组的最快方法
- Angularjs基于array类型的属性来筛选数组
- 返回只包含与给定值匹配的元素的筛选数组