首页 > 解决方案 > 试图返回具有最高值对象的父数组的索引

问题描述

我正在学习 Udemy JavaScript 课程,并且正在重温 ES6 中的所有编码练习。

我有很多团队。数组中的每个团队都是一个对象。我想比较它们并返回获胜者,但是,我的目标是以可扩展的方式做到这一点(如果将来我想添加更多团队)。

以下是我到目前为止的代码。我希望它评估任意数量的数组。我面临的问题是它只会评估前两个数组。

class Team {
    constructor(teamName, scores) {
    this.teamName = teamName,
    this.scores = scores;
    this.avgScore = Math.floor(this.scores.reduce((prev, cur) => (prev + cur) / this.scores.length));
    }
}
 
// Generate some random scores
randomNumber = () => parseInt(Math.random() * 250);
randomScore = () => [randomNumber(), randomNumber(), randomNumber()];
 
// Create the teams
let teams = [
    new Team('Team John', randomScore()),
    new Team('Team Mike', randomScore()),
    new Team('Team Mary', randomScore())
]

 
// so I can debug
for (el of teams) {
    console.log(`${el.teamName}: ${el.avgScore}`)
}

// attempt to make this scalable
let winner = 0;
calcWinner = () => teams.reduce((prev, cur, index) => cur.avgScore > prev.avgScore ? winner = index : winner = winner);
calcWinner();
 
// More debug
console.log(winner);
 
// Log result to the console
console.log(`The team with the highest average is ${teams[winner].teamName}, with a score of ${teams[winner].avgScore}`)

标签: javascriptarrays

解决方案


你在这里有几件事错了:

  1. 平均计算:
this.avgScore = Math.floor(this.scores.reduce((total, current) => (total + current)) / this.scores.length);
  1. 这应该是过滤最高平均团队的代码:
let winner = team[0];
teams.forEach(team => {
  if(team.avgScore > winner.avgScore ) {
    winner = team; 
  }
});

colsole.log(`Team name: ${winner.teamName} , Average Score: ${winner.avgScore}`)

推荐阅读