JavaScript如何对嵌套数组中的时间数据排序?适用于NFL赛程数据场景
2021年NFL周日赛程筛选排序实现方案
实现逻辑
- 第一步:筛选指定周的周日有效比赛
遍历所有球队数据,提取符合「周数匹配、比赛日为周日、客场球队记录」的场次,避免单场比赛重复录入 - 第二步:时间字符串转可比较数值
将XX:XX AM/PM格式的开球时间转换为当日总分钟数,消除字符串排序的格式误差,适配所有非固定开球时间场景 - 第三步:按分钟数升序排列,输出排序后的赛程数组
参考代码(JavaScript)
// 输入参数:原始赛程数组allTeams、目标周数targetWeek function sortSundaySchedule(allTeams, targetWeek) { // 1. 筛选符合要求的比赛 const sundayGames = allTeams.flatMap(team => { return team.schedule.filter(game => game.week === targetWeek.toString() && game.weekday === 'Sunday' && game.homeAway === 'away' // 仅取客场记录去重 ).map(game => ({ ...game, homeTeam: game.opponent, awayTeam: team.name })) }) // 2. 时间转分钟数的工具函数 const timeToMinutes = (timeStr) => { const [time, period] = timeStr.split(' ') const [hours, minutes] = time.split(':').map(Number) let totalHours = hours if (period === 'PM' && hours !== 12) totalHours += 12 if (period === 'AM' && hours === 12) totalHours = 0 return totalHours * 60 + minutes } // 3. 按开球时间升序排序 return sundayGames.sort((a, b) => timeToMinutes(a.time) - timeToMinutes(b.time)) }
代码说明
- 自动去重:通过仅提取客场球队的赛程记录,避免每场比赛在主客两队的赛程中重复出现,保证单周比赛数量符合预期
- 兼容性强:时间转换逻辑支持所有
AM/PM格式的时间点,不限于常规的三个开球时段 - 输出字段可自定义:可根据需求在map阶段新增/删减返回的赛程字段,比如球队ID、转播渠道、场馆信息等
内容的提问来源于stack exchange,提问作者John G.
相关产品推荐
相关产品推荐

