如何在JavaScript中统计API返回对象里各winning_id的出现次数?
统计队伍获胜次数的解决方案
我来帮你搞定这个问题!你需要从API返回的teams数据里统计每个winning_id对应的获胜次数,其实用JavaScript的reduce方法就能轻松实现,先分两种情况来给你说明:
情况1:teams数组的每个元素直接是单条比赛记录
如果你的teams数组结构是每个元素都直接包含winning_id字段(比如每个元素就是一场比赛的信息),代码可以这么写:
// 假设你的API响应解析后是这样的结构 const teams = [ {team_name: "Team A", date: "2018-06-30T16:02:10Z", score: 5, winning_id: 54}, {team_name: "Team B", date: "2018-06-30T17:02:10Z", score: 3, winning_id: 24}, {team_name: "Team C", date: "2018-06-30T18:02:10Z", score: 7, winning_id: 54}, // ... 剩下的97条记录 ]; // 统计获胜次数 const winCount = teams.reduce((acc, currentMatch) => { const winId = currentMatch.winning_id; // 如果当前id已经在统计对象里,就加1,否则初始化为1 acc[winId] = (acc[winId] || 0) + 1; return acc; }, {}); console.log(winCount); // 输出类似 {54:2, 24:1, ...} 的结果
情况2:teams数组的每个元素是嵌套的对象(符合你给出的示例结构)
如果你的teams数组里每个元素是一个包含多个比赛对象的键值对(比如teams[{0: {...}, 1: {...}}]),那我们需要先把所有的winning_id提取出来,再统计:
// 假设你的API响应解析后是这样的嵌套结构 const teams = [ { 0: {team_name: "Team A", date: "2018-06-30T16:02:10Z", score: 5, winning_id: 54}, 1: {team_name: "Team B", date: "2018-06-30T17:02:10Z", score: 3, winning_id: 24} }, { 2: {team_name: "Team C", date: "2018-06-30T18:02:10Z", score: 7, winning_id: 54}, 3: {team_name: "Team D", date: "2018-06-30T19:02:10Z", score: 2, winning_id: 27} }, // ... 剩下的嵌套元素 ]; // 第一步:提取所有的winning_id const allWinningIds = teams.flatMap(teamObj => Object.values(teamObj).map(match => match.winning_id) ); // 第二步:统计次数 const winCount = allWinningIds.reduce((acc, winId) => { acc[winId] = (acc[winId] || 0) + 1; return acc; }, {}); console.log(winCount); // 输出你想要的 {54:2,24:1,27:1,...} 结构
为什么你之前的方法没成功?
你提到合并数组或转字符串统计失败,大概率是因为没有正确提取所有的winning_id(比如嵌套结构没处理好),或者统计时没有给初始值、处理好不存在的id的情况。用reduce方法可以一步到位,既处理提取又处理统计,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Brandon202
相关产品推荐
相关产品推荐

