Lodash过滤器忽略大小写

时间:2017-03-28 11:56:48

标签: javascript lodash

是否有一种使用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;
    }
}

提前感谢!

3 个答案:

答案 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;
}