Se calculează valoarea cea mai mare dintre obiecte în diferite matrice

voturi
0

Am o scorematrice care conține două obiecte: Liga și Premier . Aceste 2 obiecte sunt o serie de o listă de echipe.

Am fost capabil de a defini mai mare șir atunci când a scorefost anterior o singură matrice de obiecte.

Aceasta este demo i - au reprodus în cazul în care comparația funcționează bine.

Acesta este codul de calcul al valorii mai mari comparativ cele 2 obiecte.

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>

Problema acum este că acum scoreeste o matrice de 2 obiect așa cum am spus și am încercat să schimbe funcția mea în ceva de genul

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 nu sunt în stare să treacă la funcția mea maxAverageparametrul de una dintre cele două ligi selectate și apoi cele 2 obiecte (echipe) Vreau să compare.

Aceasta este cealaltă demo i - au reprodus cu situația actuală.

Întrebat 24/10/2019 la 11:59
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
-1

De ce nu pur și simplu extrage echipa atunci când este selectat, cu excepția statului și de a folosi aceeași metodă folosită înainte?

Publicat 24/10/2019 la 12:06
sursa de către utilizator

voturi
0

Având în vedere semnarea const maxAverage = (league, teams) => ..., următorul cod se va potrivi cu argumentele așteptate (nu sunt sigur despre logica de afaceri , deși):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
Publicat 27/10/2019 la 11:40
sursa de către utilizator

voturi
0

Ce este o problemă?

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

Publicat 27/10/2019 la 12:06
sursa de către utilizator

voturi
0

M-am uitat la a doua demo-ul tău și cred că aveți două opțiuni pentru a obține echipa corectă selectat și puteți reutiliza metoda getAverage anterioare pentru ambele. Fie

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

Ca alternativă, puteți păstra codul maxAverage original și schimba modul în care implementați valoarea ligii ex.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
Publicat 29/10/2019 la 13:14
sursa de către utilizator

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