我有一个数组有一些值。如何使用jquery搜索与该数组匹配或接近的值的数组?
var a = ["foo","fool","cool","god"];
如果我想搜索oo,那么它应该返回foo,傻瓜和酷,因为这些字符串包含oo。
解决方法
要在数组中搜索,您必须使用jQuery.grep()或jQuery.map()。两者都使用回调函数返回带有过滤元素的新数组。
最快的实现(不区分大小写)在回调中使用indexOf和toUpperCase:
var search_term = 'oo'; // your search term as string var search = search_term.toUpperCase(); var array = jQuery.grep(a,function(value) { return value.toUpperCase().indexOf(search) >= 0; });
如果您不需要区分大小写的搜索,可以同时删除.toUpperCase()以加速进一步。
更灵活但更慢(对于小数组来说足够好)是使用正则表达式:
var search_term = "oo"; // search term var search = new RegExp(search_term,"i"); var arr = jQuery.grep(a,function (value) { return search.test(value); });
要么
var search_term = "oo"; // search term var search = new RegExp(search_term,"i"); var arr = jQuery.map(a,function (value) { return value.match(search) ? value : null; });
正则表达式允许您搜索比%值%更复杂。但是,如果您不需要它,因为它的速度要慢很多,请不要使用它。
你应该得到一个数组arr与匹配的元素
更新:更改示例以避免硬编码的搜索项(根据注释中的问题)并简化代码
UPDATE2:从正则表达式中删除了“g”标志