Bereken de grotere waarde tussen objecten in verschillende arrays

stemmen
0

Ik heb een scorearray met twee objecten: Liga en de Premier . Deze 2 objecten zijn een reeks van een lijst van teams.

Ik kon de grotere streng als gedefinieerd scorevoorheen een array van objecten.

Dit is de demo die ik heb gereproduceerd, waar de vergelijking werkt prima.

Deze code berekening van de hoogste waarde vergelijking van de 2 objecten.

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>

Het probleem nu is dat nu scoreis een array van de 2 object zoals ik al zei en ik probeer om mijn functie te veranderen in iets als

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
}

Ik ben niet in staat om door te geven aan mijn functie maxAveragede parameter van een van de twee liga's geselecteerd en vervolgens de 2 objecten (teams) i wilt vergelijken.

Dit is de andere demo die ik heb met de huidige situatie gereproduceerd.

De vraag is gesteld op 24/10/2019 om 11:59
bron van user
In andere talen...                            


4 antwoorden

stemmen
-1

Waarom niet gewoon halen team wanneer geselecteerd, behalve in de staat en maken gebruik van dezelfde methode voor gebruikt?

antwoordde op 24/10/2019 om 12:06
bron van user

stemmen
0

Gezien de handtekening const maxAverage = (league, teams) => ..., volgende code zou overeenkomen met de verwachte argumenten (niet zeker over de business logica wel):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
antwoordde op 27/10/2019 om 11:40
bron van user

stemmen
0

Wat is een probleem?

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

antwoordde op 27/10/2019 om 12:06
bron van user

stemmen
0

Ik keek naar je tweede demo en ik denk dat je twee keuzes om de juiste team geselecteerd en u kunt uw vorige getAverage methode voor beide hergebruiken. Een van beide

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

als alternatief kun je de oorspronkelijke maxAverage code houden en veranderen hoe je de competitie waarde bv uit te voeren.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
antwoordde op 29/10/2019 om 13:14
bron van user

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