Calcular o maior valor entre objectos em diferentes matrizes

votos
0

Eu tenho um scorearray contendo dois objetos: Liga e Premier . Estes 2 objetos são uma variedade de uma lista de equipas.

I foi capaz de definir a maior cadeia de quando scoreera anteriormente uma única matriz de objectos.

Esta é a demonstração i reproduziram onde a comparação funciona bem.

Este é o código de cálculo do valor mais elevado comparando os 2 objetos.

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>

O problema agora é que agora scoreé um array do objeto 2 como eu disse e eu estou tentando mudar minha função em algo como

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
}

Eu não sou capaz de passar para a minha função maxAveragedo parâmetro de uma das duas ligas selecionadas e, em seguida, os 2 objetos (equipes) Eu quero comparar.

Esta é a outra demonstração i ter reproduzido com a situação atual.

Publicado 24/10/2019 em 11:59
fonte usuário
Em outras línguas...                            


4 respostas

votos
-1

Por que não simplesmente extrair equipe quando selecionado, senão no estado e usar o mesmo método usado antes?

Respondeu 24/10/2019 em 12:06
fonte usuário

votos
0

Dada a assinatura const maxAverage = (league, teams) => ..., código a seguir correspondem aos argumentos esperados (não tenho certeza sobre a lógica do negócio embora):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
Respondeu 27/10/2019 em 11:40
fonte usuário

votos
0

O que é um problema?

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);

src: https://codesandbox.io/s/recharts-examples-d9qy0

Respondeu 27/10/2019 em 12:06
fonte usuário

votos
0

Olhei para a sua segunda demo e acho que você tem duas opções para obter a equipe correta selecionada e você pode reutilizar o seu método getAverage anterior para ambos. Ou

  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;
};

alternativamente você pode manter o código maxAverage original e mudar a forma como você implementar o valor liga por exemplo.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
Respondeu 29/10/2019 em 13:14
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more