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
相关产品推荐
相关产品推荐

