javascript - 试图返回具有最高值对象的父数组的索引
问题描述
我正在学习 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}`)
解决方案
你在这里有几件事错了:
- 平均计算:
this.avgScore = Math.floor(this.scores.reduce((total, current) => (total + current)) / this.scores.length);
- 这应该是过滤最高平均团队的代码:
let winner = team[0]; teams.forEach(team => { if(team.avgScore > winner.avgScore ) { winner = team; } }); colsole.log(`Team name: ${winner.teamName} , Average Score: ${winner.avgScore}`)
推荐阅读
- bash - 如何按字符串拆分文本文件内容?
- arangodb - ArangoDB 验证查询
- php - PHP 表单在暂存时提交,但在现场中断。如何调试?
- sql-server - 如何将 ldf 和 mdf 保存在两个不同的驱动器中?
- amazon-web-services - 如何在 AWS 无服务器架构中托管 Angular 6 应用程序以及域和 SSL?
- javascript - PassportJS 和 Auth0 有什么关系?
- laravel - 如何使用 Graphql 将图像文件从 Laravel 传递到 Express?
- docker - CouchDB 未在 Docker 映像上运行
- android - Xamarin Forms 自定义键盘 Unicode 字符
- postgresql - 如何使用 JPA 将“on delete set null”操作设置为外键