Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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_Jquery_Reactjs_Lodash - Fatal编程技术网

如何在javascript中通过搜索多个属性值实现逐过滤器过滤?

如何在javascript中通过搜索多个属性值实现逐过滤器过滤?,javascript,jquery,reactjs,lodash,Javascript,Jquery,Reactjs,Lodash,我想根据我在输入字段中输入的内容得到结果。此搜索可以通过多个键进行筛选,如firstName、lastName、emailId 这是我的对象数组 var resData = [ { firstName:"Jhon", lastName:"adam", emailId:"jhn12@gmail.com" }, {

我想根据我在输入字段中输入的内容得到结果。此搜索可以通过多个键进行筛选,如firstName、lastName、emailId

这是我的对象数组

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"));