从包含数字数组的对象中异步查找匹配的数字

时间:2019-03-30 16:22:03

标签: angular typescript rxjs

我需要异步返回按类别过滤的对象。简而言之,我想按类别异步加载我的产品。

我有一个名为“ 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匹配的所有产品。每个产品可以包含多个类别。

2 个答案:

答案 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 
))

然后订阅过滤的数据