You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按嵌套对象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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:32:27