如何通过rxjs选择的动态过滤器过滤数组



我这里有一系列产品,它是

let products=[
{id:1,category:[23,34],subcategory:[45,67],company:[56,78]}
{id:2,category:[46,19],subcategory:[89,645],company:[16,88]}
]

这是我的动态滤波器阵列,我必须应用

let filter=[
{key:"category",values:[19]}
{key:"company",values:[88,16]}
]

我如何通过rxjs动态过滤products数组这是我的代码,它只适用于一个过滤器,但我需要动态超过1个

这是我给的1个过滤器的代码,例如

type="category"
values=[18,19]
products.pipe(
flatMap(response => response),
filter(
(product: any) => {

return product[type].find((catnum) => values.includes(catnum))
}
), toArray()
).subscribe(data => {}

如果我正确理解您的意思,如果filter数组中的某些条件匹配,并且此filterarray可能会随时间变化,则您希望使用筛选乘积数组
首先,您应该使用map操作符来修改产品流。在map操作符中,您必须过滤通过条件的产品。

this.products$
.pipe(
map((products) => {
return products.filter((product) => {
return this.filters.some((filter) => this.isProductMeetFilterConditions(product, filter))
})
})
)
private isProductMeetFilterConditions(product: Product, filter: Filter): boolean {
return filter.values.some((value) => {
return product[filter.key].includes(value)
})
}

我在这里实现了它,你可以打开控制台,看到过滤后的结果

最新更新