如果您的问题是,是否有一些内置的东西可以为您搜索,那么不,没有。您基本上使用正则表达式String#indexOf
或正则表达式遍历数组来测试字符串。
对于循环,您至少有三个选择:
一个无聊的老for
循环。
在启用 ES5 的环境(或带有 shim)中,Array#filter
.
由于您使用jQuery jQuery.map
。
无聊的旧for
循环示例:
function search(source, name) {
var results = [];
var index;
var entry;
name = name.toUpperCase();
for (index = 0; index < source.length; ++index) {
entry = source[index];
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
results.push(entry);
}
}
return results;
}
您可以使用obj.list
assource
和所需的名称片段作为name
.
或者,如果有可能出现空白条目或没有名称的条目,请将if
其更改为:
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
Array#filter
例子:
function search(source, name) {
var results;
name = name.toUpperCase();
results = source.filter(function(entry) {
return entry.name.toUpperCase().indexOf(name) !== -1;
});
return results;
}
再一次,如果有任何机会出现空白条目(例如,undefined
与丢失相反;filter
将跳过丢失的条目),将内部返回更改为:
return entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1;
jQuery.map
示例(这里我假设jQuery
=$
通常是这种情况;如果您正在使用,请更改$
为):jQuery
noConflict
function search(source, name) {
var results;
name = name.toUpperCase();
results = $.map(source, function(entry) {
var match = entry.name.toUpperCase().indexOf(name) !== -1;
return match ? entry : null;
});
return results;
}
(再次,entry && entry.name &&
如有必要,在那里添加。)