如上图所示,我有一系列的订单。我想做的是通过产品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))
答案 0 :(得分:1)
要按ID获取订单数量,可以使用reduce,map和filter,如下所示:
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
产生此总和会更容易。