【问题标题】:How to search array keys in JavaScript/jQuery using indexOf如何使用 indexOf 在 JavaScript/jQuery 中搜索数组键
【发布时间】:2016-05-08 00:39:26
【问题描述】:

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

我有一个搜索会触发 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;
    }
})

我怎样才能使这个搜索工作?

【问题讨论】:

  • 你在哪里定义成员?
  • @JordanHendrix 在任何函数之外 - var members = [];,然后由另一个函数填充
  • 可以在会员搜索中登录会员吗?
  • members 是一个数组吗?好像你在描述一个普通的对象。代码在哪里?您是否尝试将非索引名称放在数组上?如果是这样,$.each 将忽略它们。
  • @squint 道歉 - 我已经改变了问题。在这种情况下,如果索引是使用indexOf 的字符串(成员名称),我该如何搜索?

标签: javascript jquery arrays


【解决方案1】:

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

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

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

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

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

那么 matchingUsers 将是一个数组,其中包含所有通过您的条件的用户。

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2017-05-09
    • 2015-02-11
    相关资源
    最近更新 更多