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提到的问题:)。顺便说一下,他的评论和你的回答也被接受了)