我正在比较两个不同的团队来定义哪个更强。
比较是通过计算两队得分的平均值进行的,值越大的队越强。
我在这里转载了我的案子:DEMO
这些是使用的功能
const getAverage = (league, team) => {
if (isNaN(league[0][team])) return null;
return league.map(x => x[team]).reduce((a, c) => a + c) / league.length;
};
const maxAverage = (league, teams) => {
return teams
.map(team => {
return {
team: team,
avg: getAverage(league, team)
};
})
.reduce((a, b) => (a.avg > b.avg ? a : b)).team;
};
<p>Stronger Team:{maxAverage(this.state.selectedLeague, [this.state.selectedHomeTeam,this.state.selectedAwayTeam])}</p>
如您在演示中所见,它仅部分起作用。
例如,如果我比较并选择对巴塞罗那的马竞,它定义了不正确的巴塞罗那强(-2不大于0),但是以另一种方式选择巴塞罗那对竞技,它定义了更强的马竞(0大于- 2)。
我的问题在哪里,我该如何解决?
最佳答案
在maxAverage函数上,您应该引用要在scores
对象上选择的确切联赛。
以前,您试图传递整个scores
对象,该对象同时包含Liga
和Premier
数组。这就是为什么当您尝试运行该方法时它将返回null的原因。
相反,您应该将所选联赛传递给getAverage
方法,该方法接受league
作为数组(而不是数组的对象)。
这应该是对maxAverage
函数的必需更改。
const maxAverage = (league, teams) => {
return teams
.map(team => {
return {
team: team,
avg: getAverage(scores[league], team)
};
})
.reduce((a, b) => (a.avg > b.avg ? a : b)).team;
};
我已经通过here创建了一个演示。