我需要异步返回按类别过滤的对象。简而言之,我想按类别异步加载我的产品。
我有一个名为“ getProductByID”的函数,可以通过给定的ID查找产品
getProductByID(id: number): Observable<ProductModel> {
return of(ProductsList.find((product) => product.id === id));
} //it works fine
//I tried to create same function for categories,
//but I dont know how to find number from the array
getProductsByCategory2(selectedCategory: CategoryModel): Observable<ProductModel[]> {
return of(ProductsList.find((product) => product.category === selectedCategory)
} //it doesn't work
getProductsByCategory(selectedCategory: CategoryModel): ProductModel[] {
const products: ProductModel[] = [];
for (const product of ProductsList) {
for (const category of product.category) {
if (category === selectedCategory.id) {
products.push(product);
}
}
}
return products;
}// this function works fine too, but it doesn't return products asynchronously
我需要找到与给定类别ID匹配的所有产品。每个产品可以包含多个类别。
答案 0 :(得分:1)
查找函数获取第一个匹配元素,因此请尝试过滤器函数。
请注意: 在函数getProductsByCategory2中,将product.category与selectedCategory进行比较。 js中的对象比较是通过引用进行的,使用原始值可以更有效地进行比较。
答案 1 :(得分:0)
在服务或其他获取数据的地方使用rxjs / operators中的过滤器方法。
return of(ProductsList.pipe(
map(result => result.filter(item => item.userId == 1)) // here set your filtering
))
然后订阅过滤的数据