使用以下
haystack = [{'id':'73','name':'Elvis'},{'id':'45','name':'Beatles'}, etc.]
我想进行搜索,通过搜索" elv"或者" Elv" (因此,不区分大小写的搜索)。结果应该以数组形式返回,从而允许从我的搜索中返回多个针。
我的解决方案是将我的针转换为小写,没有空格,并使用for循环通过我的haystack进行小写/ nospace名称的检查。但我怀疑还有其他更资源友好的方法(我想知道是否有更好的方法,以便我可以提高我的技能/知识)
我曾想过使用jQuery grep或inArray,但两者似乎都比较严格。而array.filter()是另一个想法。但到目前为止,各种尝试都失败了。
由于
答案 0 :(得分:0)
不确定您尝试了什么,但.filter()
应该有效。确保将搜索字符串和搜索项目的name
小写。
var searchTerm = 'Elv'.toLowerCase();
var results = haystack.filter(function(item){
return item.name.toLowerCase().indexOf(searchTerm) > -1;
});
或者你可以使用regexp进行比较
var searchTerm = 'Elv',
search = new RegExp(searchTerm, 'gi');
var results = haystack.filter(function(item){
return item.name.match(search);
});
答案 1 :(得分:0)
您可以使用Array#filter
和一些String函数
var haystack = [{ 'id': '73', 'name': 'Elvis' }, { 'id': '45', 'name': 'Beatles' }];
var w = 'elv';
function search(word) {
return haystack.filter(function(e) {
return e.name.toLowerCase().substr(0, word.length) == word;
});
}
console.log(search(w));