Async найти соответствующий номер из объекта, который включает в себя массив чисел - PullRequest
1 голос
/ 30 марта 2019

Мне нужно АСИНХРОННО возвращать объекты, которые отфильтрованы по категории.Проще говоря, я хочу загружать свои продукты АСИНХРОННО по категориям.

У меня есть функция 'getProductByID', которая находит продукт по заданному идентификатору

  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

Мне нужно найти все продукты, которые соответствуютданный идентификатор категории.Каждый продукт может содержать более 1 категории.

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Функция поиска получает первый соответствующий элемент, поэтому попробуйте функцию фильтра.

Обратите внимание: в вашей функции getProductsByCategory2 вы сравниваете product.category с selectedCategory.Сравнение объектов в js производится со ссылкой, используйте примитивное значение для более эффективного сравнения.

0 голосов
/ 30 марта 2019

Используйте метод фильтрации из rxjs / операторов в вашем сервисе или другом месте, где вы получаете данные.

return of(ProductsList.pipe(
    map(result => result.filter(item => item.userId == 1)) // here set your filtering 
))

и подписаться на отфильтрованные данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...