Angular 如何使用角度过滤管获得精确的单词,而不是与值匹配的单词?

Angular 如何使用角度过滤管获得精确的单词,而不是与值匹配的单词?,angular,typescript,ngfor,Angular,Typescript,Ngfor,例如,如果我搜索[App],我不想看到[Apple,Appliance,Appliances],而是只想在搜索中看到[App] 我被告知使用return filter.map(filterItem=>items.filter(itemItem=>itemItem==filterItem.join()),但这似乎不起作用 @Pipe({ name: 'filter' }) export class FilterPipe implements PipeTransform { tra

例如,如果我搜索[App],我不想看到[Apple,Appliance,Appliances],而是只想在搜索中看到[App]

我被告知使用return filter.map(filterItem=>items.filter(itemItem=>itemItem==filterItem.join()),但这似乎不起作用

  @Pipe({
    name: 'filter'
})

export class FilterPipe implements PipeTransform {
  transform(items: any, filter: any, isAnd: bool): any {
    if (filter && Array.isArray(items)) {
      let filterKeys = Object.keys(filter);
      if (isAnd) {
        return items.filter(item =>
            filterKeys.reduce((memo, keyName) =>
                (memo && new RegExp(filter[keyName], 'gi').test(item[keyName])) || filter[keyName] === "", true));
      } else {
        return items.filter(item => {
          return filterKeys.some((keyName) => {
            console.log(keyName);
            return new RegExp(filter[keyName], 'gi').test(item[keyName]) || filter[keyName] === "";
          });
        });
      }
    } else {
      return items;
    }
  }
}

您可以修改
RegExp
字符串以在搜索的单词前后包含单词边界(
\b

或者,您可以使用锚定(
^
:行的开始,
$
:行的结束)

比如:

`\\b${filtered_word}\\b` 


为了澄清,您的
是一个字符串数组,而
过滤器
只是一个字符串。您想只返回与
过滤器
完全匹配的
中的单词作为数组?是的,基本上是精确的单词,而不是以任何顺序包含值的单词。示例:坏搜索[TOM],找到[TOMMY,TOM]好搜索[TOM],找到[TOM],但是
是一个字符串数组,而
过滤器
只是要过滤的字符串?或者这两个变量对象/对象数组是否具有特定属性?如果是的话,你能分享一下
项目
过滤器
的样子吗?好的,下面是你想要的。筛选器=数据1、数据2、数据3项=[对象对象][对象对象对象][对象对象]
`^${filtered_word}$`