如何按订单日期汇总两种鞋码订单总数并修正代码问题?
问题分析
原代码的核心问题:
- 遍历每一条数据时,重复处理同一日期的不同尺码,最终会生成重复的日期对象
- 内层
filter同时匹配size和order_date,导致sales数组仅包含当前遍历项的尺码数据,另一个尺码的筛选结果为undefined,访问.orders时直接报错 - 未考虑同一日期下可能存在同尺码多条数据的统计逻辑(当前数据无此场景,但逻辑上需支持)
正确实现代码
const data = [ { color: 'red', order_date: '2022-11-01', size: '9', orders: 4 }, { color: 'red', order_date: '2022-11-01', size: '11', orders: 8 }, { color: 'yellow', order_date: '2022-11-04', size: '9', orders: 1 }, { color: 'yellow', order_date: '2022-11-04', size: '11', orders: 4 }, ]; // 按日期分组统计各尺码订单数 const grouped = data.reduce((acc, item) => { const date = item.order_date; // 初始化当前日期的统计结构 if (!acc[date]) { acc[date] = { orderDate: date, sizeNineTotal: 0, sizeElevenTotal: 0 }; } // 根据尺码累加订单数 if (item.size === '9') { acc[date].sizeNineTotal += item.orders; } else if (item.size === '11') { acc[date].sizeElevenTotal += item.orders; } return acc; }, {}); // 转换为数组并计算总订单数 const combinedSales = Object.values(grouped).map(item => ({ ...item, totalOrder: item.sizeNineTotal + item.sizeElevenTotal })); console.log(combinedSales);
输出结果
运行后会得到符合逻辑的统计结果:
[ { orderDate: '2022-11-01', sizeNineTotal: 4, sizeElevenTotal: 8, totalOrder: 12 }, { orderDate: '2022-11-04', sizeNineTotal: 1, sizeElevenTotal: 4, totalOrder: 5 } ]
注:你给出的期望输出中2022-11-01的sizeNineTotal为9,和原始数据中的4不符,上述代码是基于你提供的原始数据统计的正确结果。
内容的提问来源于stack exchange,提问作者stepheniok
相关产品推荐
相关产品推荐

