针对javascript对象的部分字符串搜索数组

时间:2016-03-10 17:35:00

标签: javascript jquery

使用以下

haystack = [{'id':'73','name':'Elvis'},{'id':'45','name':'Beatles'}, etc.]

我想进行搜索,通过搜索" elv"或者" Elv" (因此,不区分大小写的搜索)。结果应该以数组形式返回,从而允许从我的搜索中返回多个针。

我的解决方案是将我的针转换为小写,没有空格,并使用for循环通过我的haystack进行小写/ nospace名称的检查。但我怀疑还有其他更资源友好的方法(我想知道是否有更好的方法,以便我可以提高我的技能/知识)

我曾想过使用jQuery grep或inArray,但两者似乎都比较严格。而array.filter()是另一个想法。但到目前为止,各种尝试都失败了。

由于

2 个答案:

答案 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));