Angular 如何使用角度过滤管获得精确的单词,而不是与值匹配的单词?
例如,如果我搜索[App],我不想看到[Apple,Appliance,Appliances],而是只想在搜索中看到[App] 我被告知使用return filter.map(filterItem=>items.filter(itemItem=>itemItem==filterItem.join()),但这似乎不起作用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
@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}$`