Arrays 具有数组属性的Angular 2搜索管道过滤器对象
我有一个Angular 2搜索管道,可以过滤项目[]数组。它适用于除包含字符串数组的属性之外的所有属性 这是一个数据模型示例Arrays 具有数组属性的Angular 2搜索管道过滤器对象,arrays,angular,Arrays,Angular,我有一个Angular 2搜索管道,可以过滤项目[]数组。它适用于除包含字符串数组的属性之外的所有属性 这是一个数据模型示例 [{ 'Id': 2, 'Title': 'Abc', 'Amount': '200', 'Outcome': ['Outcome 2', 'Outcome 22', 'Outcome 222', 'Outcome 2222'] }, { 'Id': 3, 'Title': 'Abc',
[{
'Id': 2,
'Title': 'Abc',
'Amount': '200',
'Outcome': ['Outcome 2', 'Outcome 22', 'Outcome 222', 'Outcome 2222']
},
{
'Id': 3,
'Title': 'Abc',
'Amount': '300',
'Outcome': ['Outcome 3', 'Outcome 333', 'Outcome 3333', 'Outcome 33333']
}]
这是搜索管道-
不搜索结果数组
}
任何帮助都将不胜感激-谢谢 问题在于您执行的
forEach
循环中。返回true
或false
并不能达到预期效果
解决方案是将此逻辑移动到单独的功能:
export class SearchPipe implements PipeTransform {
transform(value, args?): Project[] {
let searchText = new RegExp(args, 'ig');
if (value) {
return value.filter(project => {
if (project) {
return project.Title.search(searchText) !== -1
|| project.Focus.search(searchText) !== -1
|| this._checkArray(project.Outcome, searchText);
}
});
}
}
_checkArray(arr, search) : boolean {
let found: boolean = false;
arr.forEach(outcome => {
if (outcome.search(search) !== -1) {
return true;
}
})
return found;
}
}
它还没有经过测试,而且还不漂亮。但是你得到了一个大概的想法,你的想法是错误的。它不会返回真或假。您可以将管道更改为类似这样的内容,并搜索它是否包含字符串中的内容,然后相应地返回布尔值 像这样:
@Pipe({name: 'Search'})
export class Search implements PipeTransform {
transform(value, args?) {
let searchText = 'test';
if (value) {
return value.filter(project => {
if (project) {
return !project.Outcome.every(outcome => {
return (!outcome.includes(searchText))
});
}
});
}
}
}
还要检查一下我曾经看到过的plunker()
@Pipe({name: 'Search'})
export class Search implements PipeTransform {
transform(value, args?) {
let searchText = 'test';
if (value) {
return value.filter(project => {
if (project) {
return !project.Outcome.every(outcome => {
return (!outcome.includes(searchText))
});
}
});
}
}
}