我正在比较两个不同的团队来定义哪个更强。
比较是通过计算两队得分的平均值进行的,值越大的队越强。

我在这里转载了我的案子: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对象,该对象同时包含LigaPremier数组。这就是为什么当您尝试运行该方法时它将返回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创建了一个演示。

10-06 12:27