用大写字母和小写字母过滤一行,而不仅仅是一个和另一个

时间:2019-04-16 08:41:37

标签: angular typescript

我对带有名称和电子邮件地址的行进行了过滤。我希望过滤器显示匹配结果,而不考虑大小写。 例如: 搜索管理员 应该显示admin@email.com和一个管理员用户名。

@Pipe({
  name: 'dataFilter'
})
export class DataFilterPipe implements PipeTransform {

  transform(array: any[], query: string): any {
    if (query) {
      return _.filter(array, row => row.email.toLowerCase().indexOf(query) > -1 || row.name.toLowerCase().indexOf(query) > -1)
    }
    return array;
  }
}

我添加了toLowerCase()-解决了过滤器以显示小写字母搜索的问题,但是如果用户现在搜索Admin,它将找不到电子邮件,只是用户名Admin。

4 个答案:

答案 0 :(得分:1)

尝试一下:

return _.filter(array, row => row.email.toLowerCase().indexOf(query.toLowerCase()) > -1 || row.name.toLowerCase().indexOf(query.toLowerCase()) > -1)

答案 1 :(得分:1)

无论以下哪种情况,您都可以过滤数据,也可以查看演示以进行演示- https://stackblitz.com/edit/angular-wxocfg?file=src/app/filter.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {
  transform(items: any[], searchText: string): any[] {
    if (!items) return [];
    if (!searchText) return items;
    searchText = searchText.toLowerCase();
    return items.filter(it => {
      return it.email.toLowerCase().includes(searchText) || it.name.toLowerCase().includes(searchText);
    });
  }
}

答案 2 :(得分:0)

您正在传递输入时的查询参数,因此,如果存在查询参数,但使用不同的情况,indexOf方法将返回-1,因此您应该执行的操作是将传递的查询参数转换为transfrom函数也要小写,这样就会有一个匹配项。

由于无法确定下划线的含义,因此我使用JavaScript的内置数组过滤器解决了您的问题。干杯!

@Pipe({
  name: 'dataFilter'
})
export class DataFilterPipe implements PipeTransform {

  transform(array: any[], query: string): any {
    // convert the query parameter to lowercase too
    query = query.toLowerCase();
    if(query && array.length){
        return array.filter(row => {
            return row.email.toLowerCase().indexOf(query) > -1 || 
               row.name.toLowerCase().indexOf(query) > -1;
        })
    }
  }
}

答案 3 :(得分:0)

使用格式要求大写字母和小写字母,您应该同时使用toLowerCasetoUpperCase

return _.filter(array, row => row.email.toLowerCase().indexOf(query.toLowerCase()) > -1 || row.name.toLowerCase().indexOf(query.toLowerCase()) > -1)

OR

return _.filter(array, row => row.email.toUpperCase().indexOf(query.toUpperCase()) > -1 || row.name.toUpperCase().indexOf(query.toUpperCase()) > -1)

此演示使用toUpperCase https://stackblitz.com/edit/angular-filter-ignore-case