按嵌套对象Dish.id分组数组并合并:累加菜品数量与总价
按Dish.id分组并生成累加统计数组
问题说明
我有如下类型定义的数组结构:
类型结构
// BasketDish 数组项结构 { id: string; quantity: number; Dish: AsyncItem<Dish | undefined>; basketID: string; createdAt?: string | null; updatedAt?: string | null; basketDishDishId?: string | null; } // Dish 类型结构 { id: string; name: string; price: number; }
需求是按Dish.id对BasketDish数组进行分组,最终生成包含单菜品价格、累加数量、总价的统计数组。
原始数据示例
[ { id: 1, name: 'BBQ Burger', price: 17 }, { id: 2, name: 'CheeseBurger', price: 15 }, { id: 2, name: 'CheeseBurger', price: 15 }, ]
期望输出结果
[ { id: 1, name: 'BBQ Burger', price: 17, total: 17, quantity: 1 }, { id: 2, name: 'CheeseBurger', price: 15, total: 30, quantity: 2 }, ]
我尝试过多种groupBy和合并的实现方式,但都没能达到预期效果。
最终解决方案
感谢@BioStunt的思路,调整为按Dish.id分组后,最终实现代码如下:
/** * 合并相同id的菜品并生成统计数据 */ const groupedItems = chain(basketDishes) // 按Dish.id作为分组键 .groupBy(item => item.Dish?.id) // 将每组数据转换为统计项 .map((groupItems, dishId) => ({ id: dishId, dishId: groupItems[0]?.Dish?.id, name: groupItems[0].Dish?.name, quantity: groupItems.length, total: groupItems.reduce((sum, item) => sum + (item.Dish?.price || 0), 0), })) // 获取链式处理后的结果 .value();
内容的提问来源于stack exchange,提问作者BigPun86
相关产品推荐
相关产品推荐

