如何对足球赛事API的JSON响应数据分组并建立关联
实现思路:按联赛分组赛事并建立关联
核心逻辑:基于联赛唯一标识构建映射关系
通过联赛ID(或其他全局唯一标识)作为分组键,将同联赛的赛事聚合到对应联赛条目下,同时保留联赛与赛事的关联能力。
具体步骤
解析原始数据
先将API返回的JSON字符串解析为可操作的对象,提取顶层的fixtures赛事数组。初始化分组映射容器
使用Map(推荐,键支持任意类型)或普通对象,存储联赛ID到「联赛信息+赛事列表」的映射:// 用Map存储分组关系,键为联赛ID,值为包含联赛数据和赛事数组的对象 const leagueMap = new Map();遍历赛事填充映射
循环处理每个赛事,提取其关联的联赛数据,完成分组与关联绑定:fixtures.forEach(fixture => { const league = fixture.leagues; // 假设单场赛事仅归属一个联赛 const leagueId = league.id; if (!leagueMap.has(leagueId)) { // 首次遇到该联赛,初始化结构:联赛基础数据 + 关联方法 leagueMap.set(leagueId, { ...league, // 封装fixtures方法,返回当前联赛的所有赛事 fixtures: () => leagueMap.get(leagueId)._fixturesList }); // 用内部属性存储原始赛事数组,避免方法与数据混淆 leagueMap.get(leagueId)._fixturesList = []; } // 将当前赛事添加到对应联赛的赛事列表中 leagueMap.get(leagueId)._fixturesList.push(fixture); });获取分组后的联赛集合
若需要以数组形式获取所有带赛事关联的联赛,可转换Map的值:const groupedLeagues = Array.from(leagueMap.values());执行关联查询
此时任意联赛对象都可通过league.fixtures()获取其下所有赛事:// 示例:获取第一个联赛的所有赛事 const targetLeague = groupedLeagues[0]; const leagueAllFixtures = targetLeague.fixtures();
注意事项
- 必须确保联赛拥有全局唯一标识(如
id),避免因联赛名称重复导致分组错误 - 若赛事可能归属多个联赛,需调整逻辑为遍历赛事的
leagues数组,将赛事添加到多个联赛的列表中 - 后端语言(如Python/Java)实现逻辑一致:用字典/HashMap做映射,给联赛对象添加方法或属性关联赛事
内容的提问来源于stack exchange,提问作者Tula
相关产品推荐
相关产品推荐

