请求解释:基于game对象创建scorers进球统计对象的代码逻辑
代码解释:统计进球球员次数的实现逻辑
给定的游戏数据对象
const game = { team1: 'Bayern Munich', team2: 'Borrussia Dortmund', score: '4:0', scored: ['Lewandowski', 'Gnarby', 'Lewandowski', 'Hummels'], date: 'Nov 9th, 2037', odds: { team1: 1.33, x: 3.25, team2: 6.5, }, };
需求目标
创建名为scorers的对象,以进球球员姓名为属性名,对应进球次数为属性值。
你的解决方案代码
const scorers = {}; for (const player of game.scored) { scorers[player] ? scorers[player]++ : (scorers[player] = 1); }; console.log(scorers);
代码工作原理拆解
- 初始化空对象:
const scorers = {};先创建一个空对象,用来存储最终的进球次数统计结果。 - 遍历进球数组:
for (const player of game.scored)使用for...of循环遍历game.scored数组,数组里的每一项都是进球球员的名字,循环会逐个取出每个名字赋值给player变量。 - 核心统计逻辑(三元表达式):
scorers[player] ? scorers[player]++ : (scorers[player] = 1);- 先判断
scorers对象中是否存在当前player对应的属性:如果存在(说明该球员之前已经有进球记录,属性值是大于0的数字,在布尔判断中为真),就把该属性的值加1,实现次数累加。 - 如果不存在该属性(此时
scorers[player]为undefined,布尔判断为假),就给scorers对象新增这个球员属性,并将值设为1,标记这是该球员第一次进球。
- 先判断
- 输出结果:
console.log(scorers);最终打印出的scorers对象就是{ Lewandowski: 2, Gnarby: 1, Hummels: 1 },完全符合需求。
内容的提问来源于stack exchange,提问作者Alex14
相关产品推荐
相关产品推荐

