如何在JavaScript中按星期对API返回的订单对象分组
按星期几分组订单数据并整理为指定结构
需求说明
从API获取的订单数据包含createdDate、orderId、customerId字段,需要将这些订单按星期几(SUN到SAT)分组,最终输出结构需满足:
period字段固定为'lastWeek'data数组包含7个对象,分别对应SUN到SAT,每个对象的value数组存放对应星期的订单,无数据则为空数组
实现示例(JavaScript)
1. 模拟API返回的订单数据
const apiOrders = [ { orderId: 'ORD001', customerId: 'CUS001', createdDate: '2022-09-20' }, // 周二 { orderId: 'ORD002', customerId: 'CUS002', createdDate: '2022-09-20' }, // 周二 { orderId: 'ORD003', customerId: 'CUS003', createdDate: '2022-09-21' } // 周三 ];
2. 核心处理逻辑
// 定义星期顺序:SUN到SAT const weekDays = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']; // 辅助函数:根据日期字符串获取对应的星期缩写 const getWeekDay = (dateStr) => { const date = new Date(dateStr); // getDay()返回0(周日)到6(周六),对应weekDays的索引 return weekDays[date.getDay()]; }; // 分组订单并构建目标结构 const groupOrdersByWeekDay = (orders) => { // 初始化所有星期的分组,确保顺序严格为SUN到SAT const initialGroups = weekDays.map(day => ({ day, value: [] })); // 将每个订单分配到对应星期的分组中 orders.forEach(order => { const day = getWeekDay(order.createdDate); const targetGroup = initialGroups.find(group => group.day === day); if (targetGroup) { targetGroup.value.push(order); } }); return { period: 'lastWeek', data: initialGroups }; }; // 执行处理并输出结果 const finalResult = groupOrdersByWeekDay(apiOrders); console.log(finalResult);
3. 最终输出结果
{ period: 'lastWeek', data: [ { day: 'SUN', value: [] }, { day: 'MON', value: [] }, { day: 'TUE', value: [ { orderId: 'ORD001', customerId: 'CUS001', createdDate: '2022-09-20' }, { orderId: 'ORD002', customerId: 'CUS002', createdDate: '2022-09-20' } ] }, { day: 'WED', value: [ { orderId: 'ORD003', customerId: 'CUS003', createdDate: '2022-09-21' } ] }, { day: 'THU', value: [] }, { day: 'FRI', value: [] }, { day: 'SAT', value: [] } ] }
关键细节
- 先初始化所有星期的分组,保证
data数组严格遵循SUN到SAT的顺序,无数据时自动保留空数组 getWeekDay函数利用Date.getDay()的返回值(0对应周日,6对应周六)匹配预设的星期缩写数组- 遍历订单时直接定位对应分组,避免遗漏或顺序错乱
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

