如何在javascript中通过搜索多个属性值实现逐过滤器过滤?
我想根据我在输入字段中输入的内容得到结果。此搜索可以通过多个键进行筛选,如firstName、lastName、emailId 这是我的对象数组如何在javascript中通过搜索多个属性值实现逐过滤器过滤?,javascript,jquery,reactjs,lodash,Javascript,Jquery,Reactjs,Lodash,我想根据我在输入字段中输入的内容得到结果。此搜索可以通过多个键进行筛选,如firstName、lastName、emailId 这是我的对象数组 var resData = [ { firstName:"Jhon", lastName:"adam", emailId:"jhn12@gmail.com" }, {
var resData = [
{
firstName:"Jhon",
lastName:"adam",
emailId:"jhn12@gmail.com"
},
{
firstName:"Kyle",
lastName:"Miller",
emailId:"kl12@gmail.com"
},
{
firstName:"Jhonathan",
lastName:"adam",
emailId:"jadm12@gmail.com"
},
{
firstName:"Lewis",
lastName:"harber",
emailId:"lewh12@gmail.com"
}
];
Javascript代码
resData.filter(data, function(item){
item.map(function(list, i) {
if (list.firstName.toLowerCase().indexOf(self.state.inputValue.toLowerCase()) === -1 || list.lastName.toLowerCase().indexOf(self.state.inputValue.toLowerCase()) === -1 || list.emailId.toLowerCase().indexOf(self.state.inputValue.toLowerCase()) === -1) {
return;
}
console.log(list);
});
});
如果找到某个值,您可以遍历这些键并为过滤器返回true
var resData=[{firstName:“Jhon”,lastName:“adam”,emailId:“jhn12@gmail.com},{姓:“凯尔”,姓:“米勒”,emailId:kl12@gmail.com},{名字:“乔纳坦”,姓氏:“亚当”,电子邮件ID:jadm12@gmail.com},{姓:“刘易斯”,姓:“哈伯”,emailId:lewh12@gmail.com" }],
self={state:{inputValue:'adam'}},
结果=resData.filter(函数(项){
返回Object.key(item).some(function(k){
返回项[k].toLowerCase().indexOf(self.state.inputValue.toLowerCase())!=-1;
});
});
控制台日志(结果)代码>如果找到某个值,您可以遍历这些键并为过滤器返回true
var resData=[{firstName:“Jhon”,lastName:“adam”,emailId:“jhn12@gmail.com},{姓:“凯尔”,姓:“米勒”,emailId:kl12@gmail.com},{名字:“乔纳坦”,姓氏:“亚当”,电子邮件ID:jadm12@gmail.com},{姓:“刘易斯”,姓:“哈伯”,emailId:lewh12@gmail.com" }],
self={state:{inputValue:'adam'}},
结果=resData.filter(函数(项){
返回Object.key(item).some(function(k){
返回项[k].toLowerCase().indexOf(self.state.inputValue.toLowerCase())!=-1;
});
});
控制台日志(结果)代码>看起来您想按任意键搜索
var resData=[{
名字:“Jhon”,
姓:“亚当”,
电子邮件ID:“jhn12@gmail.com"
}, {
名字:“凯尔”,
姓氏:“米勒”,
电子邮件ID:“kl12@gmail.com"
}, {
名字:“乔纳坦”,
姓:“亚当”,
电子邮件ID:“jadm12@gmail.com"
}, {
名字:“刘易斯”,
姓:“哈伯”,
电子邮件ID:“lewh12@gmail.com"
}];
//var searchString=self.state.inputValue.toLowerCase();
var searchString=“adam.toLowerCase();
//过滤数据
var filteredData=resData.filter(函数(项){
//对于数组中的每个项,检查每个键值
用于(输入项){
//如果键值与搜索字符串匹配,则返回true
if(item[key].toLowerCase()==searchString)返回true;
}
//如果我们得到这里,这意味着该项中的值都不匹配,因此返回false
返回false;
});
console.log(filteredData)代码>看起来您想按任意键搜索
var resData=[{
名字:“Jhon”,
姓:“亚当”,
电子邮件ID:“jhn12@gmail.com"
}, {
名字:“凯尔”,
姓氏:“米勒”,
电子邮件ID:“kl12@gmail.com"
}, {
名字:“乔纳坦”,
姓:“亚当”,
电子邮件ID:“jadm12@gmail.com"
}, {
名字:“刘易斯”,
姓:“哈伯”,
电子邮件ID:“lewh12@gmail.com"
}];
//var searchString=self.state.inputValue.toLowerCase();
var searchString=“adam.toLowerCase();
//过滤数据
var filteredData=resData.filter(函数(项){
//对于数组中的每个项,检查每个键值
用于(输入项){
//如果键值与搜索字符串匹配,则返回true
if(item[key].toLowerCase()==searchString)返回true;
}
//如果我们得到这里,这意味着该项中的值都不匹配,因此返回false
返回false;
});
console.log(filteredData)代码>以及用户应如何输入多个值?是否有格式,例如firstname:Jhon emaiid:jhn12@gmail.com
?或者它只是一个空格分隔的字符串列表:jhonjhn12@gmail.com
?听起来您需要一个自动完成程序来查找所有值中的匹配项。映射在那里做什么?用户应该如何输入多个值?是否有格式,例如firstname:Jhon emaiid:jhn12@gmail.com
?或者它只是一个空格分隔的字符串列表:jhonjhn12@gmail.com
?听起来您需要一个自动完成程序来查找所有值中的匹配项。map
在那里做了什么?虽然这在性能和可读性方面比OP的版本要好,但不确定它是否真的回答了这个问题。这是怎么回事?这将返回与基于不同键值的搜索文本匹配的元素。这就是我对他的问题的理解。是的,这正是问题所在,根本不清楚问题是什么。虽然在性能和可读性方面,这比OP的版本要好,但不确定它是否真的回答了问题。这是怎么回事?这将返回与基于不同键值的搜索文本匹配的元素。这就是我对他的问题的理解。是的,这正是问题所在,根本不清楚问题是什么。我可以手动定义键吗?因为有些键值是空的。所以它返回错误。我可以手动定义键吗?因为有些键值是空的。所以它的返回错误。
var resData = [
{
firstName:"Jhon",
lastName:"adam",
emailId:"jhn12@gmail.com"
},
{
firstName:"Kyle",
lastName:"Miller",
emailId:"kl12@gmail.com"
},
{
firstName:"Jhonathan",
lastName:"adam",
emailId:"jadm12@gmail.com"
},
{
firstName:"Lewis",
lastName:"harber",
emailId:"lewh12@gmail.com"
}
];
var search = function(text) {
text = text.toLowerCase();
return resData.filter(x => x.firstName.toLowerCase().indexOf(text) >= 0
|| x.lastName.toLowerCase().indexOf(text) >= 0
|| x.emailId.toLowerCase().indexOf(text) >= 0);
}
console.log(search("Adam"));