是否有一种使用lodash进行不区分大小写的过滤器的方法?我试过这个(见下文),但这只是部分工作(当用户输入也是小写时)。另一个问题是在一次搜索后所有字符都是小写的。
无论如何(小写或大写)我想过滤。
filter(q: string) {
let query = q.trim();
let searchData = [];
searchData = clone(this.data);
searchData = searchData.map((entity) => {
entity.email = entity.email.toLowerCase();
return entity;
});
if (query) {
this.approverEntities = filter(searchData, (a) => a.email.indexOf(query) >= 0);
} else {
this.approverEntities = this.data;
}
}
提前感谢!
答案 0 :(得分:2)
这种方法对我很有用:
this.approverEntities = _.filter(searchData, (a) => {return new RegExp(a.email, 'i').test(query)});
一个警告是,如果a.email
包含任何特殊字符,则正则表达式将表示为正则表达式标记(,例如括号,括号等)。该解决方案将处理特殊字符,无论......
this.approverEntities = _.filter(searchData, (a) => {return a.email.toLowerCase() == query.toLowerCase()});
答案 1 :(得分:1)
您可以使用filter(),method()和不区分大小写的正则表达式:
_.filter(searchData, _.method('email.match', /foo/i));
或者,如果搜索字词是动态的:
const filterCaseInsensitive = (search, searchData) =>
_.filter(searchData, _.method('email.match', new RegExp(search, 'i'));
答案 2 :(得分:1)
这是我使用不区分大小写的过滤器的方式,同时也只需要一个子字符串:
this.approverEntities = filter(searchData, function(a){
return a.email.toLowerCase().indexOf((query).toLowerCase()) !== -1;
}