Calculer la plus grande valeur entre les objets dans différents tableaux

voix
0

J'ai un scoretableau contenant deux objets: Liga et le premier ministre . Ces 2 objets sont un tableau d'une liste d'équipes.

Je suis en mesure de définir la plus grande chaîne quand scoreétait auparavant un seul tableau d'objets.

Ceci est la démonstration que je reproduis où la comparaison fonctionne très bien.

Voici le code du calcul de la valeur plus élevée en comparant les 2 objets.

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>

Le problème est maintenant que maintenant scoreest un tableau de l'objet 2 comme je l' ai dit et je suis en train de changer ma fonction dans quelque chose comme

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
}

Je ne suis pas en mesure de passer à ma fonction maxAveragele paramètre de l' un des deux ligues sélectionnées, puis les 2 objets (équipes) je veux comparer.

Ceci est l'autre démo je l' ai reproduit avec la situation actuelle.

Créé 24/10/2019 à 11:59
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
-1

Pourquoi ne pas simplement extraire l'équipe lors de la sélection, sauf dans l'état et utiliser la même méthode utilisée avant?

Créé 24/10/2019 à 12:06
source utilisateur

voix
0

Compte tenu de la signature const maxAverage = (league, teams) => ..., le code suivant correspondrait aux arguments attendus (pas sûr de la logique métier bien):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
Créé 27/10/2019 à 11:40
source utilisateur

voix
0

Qu'est-ce qu'un problème?

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

Créé 27/10/2019 à 12:06
source utilisateur

voix
0

Je regardais votre deuxième démo et je pense que vous avez deux choix pour obtenir la bonne équipe sélectionnée et vous pouvez réutiliser votre méthode de getAverage précédente pour les deux. Non plus

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

Sinon, vous pouvez conserver le code maxAverage original et changer la façon dont vous implémentez la valeur de la ligue par exemple.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
Créé 29/10/2019 à 13:14
source utilisateur

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