Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跨多个属性查找数组中的对象_Javascript - Fatal编程技术网

Javascript 跨多个属性查找数组中的对象

Javascript 跨多个属性查找数组中的对象,javascript,Javascript,因此,我正在尝试构建一个输入,我可以键入,然后只显示具有匹配文本的对象。我快到了,但需要一点帮助。我认为我所做的是有效的,但我相信可能有更好的方法 因此,我希望用户在输入中可以键入以下值: 电话 电子邮件 名字 姓氏 姓 我认为我的代码对这一切都有效,但我不确定我是否喜欢我为名字和姓氏所做的工作。我想知道我是否应该使用正则表达式而不是我正在做的事情。想法 export-let客户=[ { id:1, 名字:“约翰”, 姓氏:“史密斯”, 电子邮件:“约翰。smith@test.com', 电

因此,我正在尝试构建一个输入,我可以键入,然后只显示具有匹配文本的对象。我快到了,但需要一点帮助。我认为我所做的是有效的,但我相信可能有更好的方法

因此,我希望用户在输入中可以键入以下值:

  • 电话
  • 电子邮件
  • 名字
  • 姓氏
我认为我的代码对这一切都有效,但我不确定我是否喜欢我为名字和姓氏所做的工作。我想知道我是否应该使用正则表达式而不是我正在做的事情。想法

export-let客户=[
{
id:1,
名字:“约翰”,
姓氏:“史密斯”,
电子邮件:“约翰。smith@test.com',
电话:'7025551234',
},
{
id:2,
名字:“乔纳森”,
姓氏:“哈肯”,
电子邮件:“乔纳森。harken@test.com',
电话:7165551234,
},
{
id:3,
名字:“扎克”,
姓:“莫斯”,
电子邮件:“扎克。moss@test.com',
电话:9995551234,
},
];
导出常量过滤器列表=(建议,搜索值)=>{
返回建议。筛选器((sug)=>{
让shouldReturn=false;
for(Object.entries(sug))的常量[key,keyValue]{
如果(键!=“id”){
设keyV=keyValue.toLowerCase();
让hasSpace=searchValue.indexOf(“”)>-1;
如果(!hasSpace&&keyV.indexOf(searchValue)>-1){
shouldReturn=true;
}
if(hasSpace){
let split=searchValue.split(“”);
开关(钥匙){
案例“firstName”:
if(键v.indexOf(拆分[0])>-1){
shouldReturn=true;
}
打破
案例“lastName”:
if(键v.indexOf(拆分[1])>-1){
shouldReturn=true;
}
打破
违约:
打破
}
}
}
}
如果(应该返回){
返回sug;
}否则{
返回null;
}
});
}
我只是觉得有点不对劲


这是一个更简单的版本,其行为应该与您的函数类似

让客户=[{
id:1,
名字:“约翰”,
姓氏:“史密斯”,
电子邮件:“约翰。smith@test.com',
电话:'7025551234',
},
{
id:2,
名字:“乔纳森”,
姓氏:“哈肯”,
电子邮件:“乔纳森。harken@taest.com',
电话:7165551234,
},
{
id:3,
名字:“扎克”,
姓:“莫斯”,
电子邮件:“扎克。moss@test.com',
电话:9995551234,
},
];
函数filterByValue(objectList,searchValue){
const tokens=searchValue.toLowerCase().split(“”);
返回Object.values(objectList.filter)(条目=>{
返回Object.values(entry).some(entryValue=>{
if(typeof(entryValue)!='string')
返回false;
entryValue=entryValue.toLowerCase();
返回tokens.every(token=>entryValue.includes(token));
})
})
}
log(filterByValue(customers,'.com'))
log(filterByValue(客户,'555234'))
log(filterByValue(客户,'john555'))

log(filterByValue(customers,'johntest.com'))
indexOf
查找静态文本片段非常好。我看到正则表达式带来的唯一改进是,只需设置相应的标志,就可以使整个搜索不区分大小写。(但如果您先将输入文本和搜索值都小写,那么indexOf也可以实现这一点。)