Angular 角度-如何过滤动态数据?
我有两种不同类型的接口,我想根据动态提供的给定接口过滤数据Angular 角度-如何过滤动态数据?,angular,typescript,Angular,Typescript,我有两种不同类型的接口,我想根据动态提供的给定接口过滤数据 export interface Country { cId: string; cName: string; cFlag: string; } export interface Address { aId: string; aName: string; aStreet: string; } 我创建了一个方法,它可以过滤单一类型接口的数据,我希望这个方法可以过滤任何类型的数据,下面是代码
export interface Country {
cId: string;
cName: string;
cFlag: string;
}
export interface Address {
aId: string;
aName: string;
aStreet: string;
}
我创建了一个方法,它可以过滤单一类型接口的数据,我希望这个方法可以过滤任何类型的数据,下面是代码:
public data: any[] = [];
var filteredObject = this.data;
var { search } = query;
if (search) {
search = search.toLowerCase();
filteredObject = filteredObject.filter((f) => {
f.includes(search);
({ firstColumn, secondColumn, thirdColumn }) =>
firstColumn.toLowerCase().includes(search) ||
secondColumn.toLowerCase().includes(search) ||
thirdColumn.toLowerCase().includes(search)
});
}
如您所见,筛选器的第一、第二和第三列应该是动态的,并且取决于所传递接口的类型,例如:
如果接口类型为国家,则
cId、cName、cFlag
必须代替静态值,依此类推。正如@berk kurkcuoglu所说,您可以在过滤器中使用和。使用和toString
可以过滤除对象类型字段以外的任何类型的字段
const数据:任意[]=[
{cId:1,cName:“秘鲁”,cFlag:2},
{援助:1,cName:“工作”,cStreet:“93 Mcguire广场”},
];
让filteredObject=数据;
让搜索=“pe”;
如果(搜索){
search=search.toLowerCase();
filteredObject=filteredObject.filter((f)=>{
返回Object.values(f).some(v=>{
//if(typeof v!=“string”)返回false;
返回v?.toString().toLowerCase().includes(搜索);
});
});
}
控制台日志(filteredObject);
您可以根据对象值的类型筛选对象值,如果它们是否为字符串,则根据searchvalue进行筛选。然后,我必须提供传递接口的键列表??如果您在对象上使用object.values,则它将变为字段无关,除非您想指定某些字段,否则我已经解决了@berk kurkcuoglu提到的问题:)。顺便说一下,他的评论和你的回答也被接受了)