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

TypeScript如何实现数组投影,将购物车转换为指定格式的Order类型数组

实现方案

你可以先统计购物车中每个商品ID的购买次数,再将统计结果转为符合Order接口格式的数组即可,下面提供两种常用的实现方式:

方式1:Map统计+转换(易读性高,适合新手)

// 初始化Map存储每个id对应的购买数量
const idCountMap = new Map<number, number>();
// 遍历购物车统计数量
cart.forEach(product => {
  const currentCount = idCountMap.get(product.id) || 0;
  idCountMap.set(product.id, currentCount + 1);
});

// 将统计结果转换为Order类型数组
export const orders: Order[] = Array.from(idCountMap.entries()).map(([id, qt]) => ({
  id,
  qt
}));

方式2:reduce方法一步完成(代码更简洁)

export const orders: Order[] = Object.values(
  cart.reduce((record, product) => {
    // 如果当前id没有记录,先初始化Order对象
    if (!record[product.id]) {
      record[product.id] = { id: product.id, qt: 0 };
    }
    // 对应id的购买数量+1
    record[product.id].qt += 1;
    return record;
  }, {} as Record<number, Order>)
);

补充说明

  • 两种方式生成的orders默认顺序和商品在购物车中首次出现的顺序一致,如果你需要按商品ID升序排序,可以在生成数组后追加排序逻辑:orders.sort((a, b) => a.id - b.id)
  • 运行后得到的orders就是你预期的[{id:1,qt:4},{id:2, qt:2},{id:3,qt:2}]结果

内容的提问来源于stack exchange,提问作者Display Name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:02