如何使用indexOf在JavaScript / jQuery中搜索数组键

时间:2016-05-07 16:27:55

标签: javascript jquery arrays

我有一个数组members。这个数组有一个名称作为索引(例如“John Smith”)和一个带有“degree”和“id”的数组,如下所示:

Array

我有keyup动作触发的搜索。它应该搜索成员名称(索引),然后将任何匹配成员的名称输出到控制台:

function memberSearch(){
    var $input = $("#guestsearch>input");
    var val = $input.val();
    console.log(val);

    $.each(members, function(i,v){
        if(i.indexOf(val)>-1){
            console.log(members[i]);
        }
    })
}

但是,除了搜索值val之外,这不会输出任何内容。即使$.each函数只是console.log(i),也没有输出。

如果我在控制台中手动输入console.log(members),则会显示上面的屏幕截图。

members由函数的这一部分填充:

$.each(json.response.data[0].members, function(i,v){
    var m = json.response.data[0].members[i];
    var name = m.name;
    if(name.typeof!=="undefined"&&name!=""&&name!=null&&name.length>0){
        members[name] = [];
        members[name]["degree"] = m.degree;
        members[name]["id"] = m.id;
    }
})

如何进行此搜索?

1 个答案:

答案 0 :(得分:1)

如果成员是一个对象,它与键/值对看起来一样,则可以使用Object.keys(objVariable)来获取对象的键以循环并执行比较/正则表达式逻辑。

Object.keys(members).forEach(function(name){
    if (/* logic to match on name */) {
        console.log(members[name]);
    }
});

否则,如果member是包含这些对象的数组......

var matchingUsers = members.filter(function(){
    var username = Object.keys(this)[0];

    return (/* match username to whatever */);
});

然后,matchingUsers将是一个包含所有通过您标准的用户的数组。