如何在表中过滤一个不是字符串的数字?

时间:2018-01-17 23:04:22

标签: html angular datagrid angular4-forms angular-forms

我想在我的表中搜索,但只能通过字符串搜索。

我使用过滤管:

export class FilterPipe implements PipeTransform {

     transform(items: any[], field: string, value: string): any[] {
        if (!items) {
          return [];
        }
        if (!field || !value) {
          return items;
        }

          return items.filter(singleItem => singleItem[field].toLowerCase().includes(value.toLowerCase()));
      }

该项目是一个带数字的字段

<tr *ngFor="let todo of todos | filter: 'project' : searchString; let i = index">//It doesnt works.

我做错了什么?

已更新

transform(items: any[], field: string, value: string): any[] {
    if (!items) {
      return [];
    }
    if (!field || !value) {
      return items;
    }

    return items.filter(singleItem => value.toLowerCase());
  }

1 个答案:

答案 0 :(得分:0)

您只能在toLowerCase()上呼叫string,而不能在number上呼叫。

解决方案首先将其转换为字符串,如下所示:

(singleItem[field] + '').toLowerCase()

更新

您的更新版本的过滤器中缺少一个布尔谓词,需要确定是否应过滤掉项目,但value.toLowerCase()始终评估为true非空value的字符串,因此没有任何内容被过滤掉:

items.filter(singleItem => value.toLowerCase());

相反,你应该做类似的事情:

isIncluded(item: any, value: any, field: any): boolean {
  // transform item to a string, in case it's of type number
  const itemString = (item[field] + '').toLowerCase();
  // transform value to a string ...
  const valueString = (value + '').toLowerCase();
  // decide, whether item should be filtered out
  return itemString.includes(valueString);
}


transform(items: any[], field: string, value: string): any[] {
   // (...)

   return items.filter(item => this.isIncluded(item, value, field));
}