如何使用TS在Angular 2中搜索对象的所有属性中的字符串。
如果用户键入一个值,我想搜索所有属性值以推送符合键入值的客户,我会在带有搜索框的表中呈现一组客户。
export var CUSTOMER: Client[] = [
{ id: 1, name: 'John', phone: '888-888-888'},
{ id: 2, name: 'Nick', phone: '555-888-888'},
{ id: 3, name: 'Mike', phone: '666-888-888'},
];
过滤管道
import {Pipe, PipeTransform, Injectable} from "@angular/core";
@Pipe({
name: 'filter',
pure: false
})
@Injectable()
export class Ng2SearchPipe implements PipeTransform {
transform(items: any, term: any): any {
if (term === undefined) {
return items;
}
return items.filter(function(item){
return item.name.toLowerCase().includes(term.toLowerCase());
});
}
}
在上面的过滤管道中,我只能按名称搜索。我不知道如何处理这个问题。我应该为Customer对象创建一个方法,该方法返回连接的所有属性值,然后在此连接值上搜索该术语吗?
答案 0 :(得分:7)
您需要应用空检查并使用.toString()
否则,如果值为数字,则无法使用toLowerCase()
方法并且会引发错误。
return items.filter(item =>
Object.keys(item).some(
k =>
item[k] != null &&
item[k]
.toString()
.toLowerCase()
.includes(term.toLowerCase())
)
);
答案 1 :(得分:5)
你可以遍历项目的键,看看它们中是否包含任何字符串,如果有任何数字匹配则返回true:
return items.filter(item =>
Object.keys(item).some(k => item[k].includes(term.toLowerCase());
)
答案 2 :(得分:-1)
`arrayObj = [
{name: 'Maxim', age: 15},
{name: 'Pasha', age: 35},
{name: 'Lena', age: 25},
];
let filteredObj = arrayObj.filter((item: any) => {
if (JSON.stringify(item).includes('Maxim')) {
return item;
}
});`
把它放在一个寄存器中也不错。