如何使用map或ID过滤在嵌套数组中获取值

时间:2019-03-11 09:10:14

标签: javascript typescript rxjs

enter image description here

如上图所示,我有一系列的订单。我想做的是通过产品ID(bmJr7AkG)获得产品订单数和数量

我想从orders数组中获取每种产品已订购了多少次以及每种情况下订购的产品数量(数据数组)。

如何使用filter或map方法做到这一点。

this.ds.getAllOrders().pipe(
 map((orders: any) => orders.forEach(item => 
   item.cart.filter(cart => cart.product.id
            === "bmJr7AkG")
            ))
        ).subscribe(items => console.log(items))

1 个答案:

答案 0 :(得分:1)

要按ID获取订单数量,可以使用reducemapfilter,如下所示:

this.ds.getAllOrders().pipe(
  map(orders =>
    orders.reduce((total, order) => {
      return total +
        order.cart.filter(item => item.product.id === 'bmJr7AkG')
                  .map(item => item.data.quantity) // map to quantity
                  .reduce((sum, qty) => sum + qty, 0); // sum the quantities
    }, 0)
  )
).subscribe(count => console.log(count))

使用forEach是不必要的,因为它不会产生任何结果,它只是将操作应用于您的项目。您本可以使用map将每个订单映射到一个计数,然后将这些值相加,但是在迭代商品时,使用reduce产生此总和会更容易。