我有一个数组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;
}
})
如何进行此搜索?
答案 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将是一个包含所有通过您标准的用户的数组。