Рассчитать большее значение между объектами в разных массивах - PullRequest
0 голосов
/ 24 октября 2019

У меня есть массив score, содержащий два объекта: Лига и Премьер . Эти 2 объекта являются массивом списка команд.

Мне удалось определить большую строку, когда score ранее был одним массивом объектов.

Это демо я воспроизвел там, где сравнение работает нормально.

Этот код вычисляет более высокое значение, сравнивая 2 объекта.

const maxAverage = teams => {
  return teams.map(team => {
      return {
          team:team, 
          avg: getAverage(team)
      }
  }).reduce((a,b)=>a.avg>b.avg?a:b).team
}


<p>Stronger Team:{maxAverage([this.state.homeCity,this.state.awayCity])</p>

Теперь проблема в том, что теперь scoreкак я уже сказал, это массив объекта 2, и я пытаюсь изменить свою функцию следующим образом:

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
}

Я не могу передать своей функции maxAverage параметр одной из двух лигвыбрал, а затем 2 объекта (команды), которые я хочу сравнить.

я хочу сделать что-то вроде этого:

<p>Stronger Team:{maxAverage([this.state.selectedLeague], this.state.selectedHomeTeam,this.state.selectedAwayTeam])}

Это другая демонстрация у меня естьвоспроизведено с текущей ситуацией.

Ответы [ 4 ]

1 голос
/ 29 октября 2019

Я посмотрел ваше второе демо и думаю, что у вас есть два варианта выбора правильной команды, и вы можете повторно использовать свой предыдущий метод getAverage для обоих. Либо

  const maxAverage = (league, teams) => {
  const currentLeague = [scores][0][league]
  return teams
    .map(team => {
      return {
        team: team,
        avg: getAverage(currentLeague, team)
      };
    })
    .reduce((a, b) => (a.avg > b.avg ? a : b)).team;
};

, либо вы можете оставить исходный код maxAverage и изменить способ реализации значения лиги, например.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
1 голос
/ 27 октября 2019

Учитывая подпись const maxAverage = (league, teams) => ..., следующий код будет соответствовать ожидаемым аргументам (хотя и не уверен насчет бизнес-логики):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
0 голосов
/ 27 октября 2019

В чем проблема?

const scores = {'liga':[
  { day: "1", Barcelona: 1, Real: 3, Valencia: 0 },
  { day: "2", Barcelona: 4, Real: 6, Valencia: 3 },
  { day: "3", Barcelona: 7, Real: 7, Valencia: 3 },
  { day: "4", Barcelona: 7, Real: 8, Valencia: 6 }
], 'primier':[
  { day: "1", Barcelona: 1, Real: 3, Valencia: 0 },
  { day: "2", Barcelona: 4, Real: 6, Valencia: 3 },
  { day: "3", Barcelona: 7, Real: 7, Valencia: 3 },
  { day: "4", Barcelona: 7, Real: 8, Valencia: 6 }]};
const getAverage = (type, team) => {
  if (isNaN(scores[type][0][team])) return null;

  return scores[type].map(x => x[team]).reduce((a, c) => a + c) / scores[type].length;
};
getAverage('liga',this.state.homeCity);

Источник: https://codesandbox.io/s/recharts-examples-d9qy0

0 голосов
/ 24 октября 2019

Почему бы просто не извлечь команду, когда она выбрана, сохранить в состоянии и использовать тот же метод, который использовался ранее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...