Calcolare il valore maggiore tra gli oggetti in diverse matrici

voti
0

Ho un scorearray contenente due oggetti: Liga e Premier . Questi 2 oggetti sono una serie di un elenco di squadre.

Sono stato in grado di definire il maggiore stringa quando scoreera un unico array di oggetti.

Questa è la dimostrazione che ho riprodotto dove il confronto funziona bene.

Questo è il codice calcolo del valore più elevato confrontando i 2 oggetti.

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>

Il problema ora è che ora scoreè un array dell'oggetto 2 come ho detto e sto cercando di cambiare la mia funzione in qualcosa di simile

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
}

Io non sono in grado di trasmettere alla mia funzione maxAveragedel parametro di uno dei due campionati selezionati e poi i 2 oggetti (squadre) voglio mettere a confronto.

Questo è l'altro demo ho riprodotto con la situazione attuale.

È pubblicato 24/10/2019 alle 11:59
fonte dall'utente
In altre lingue...                            


4 risposte

voti
-1

Perché non è sufficiente estrarre squadra quando selezionato, Salva nello stato e utilizzare lo stesso metodo usato prima?

Risposto il 24/10/2019 a 12:06
fonte dall'utente

voti
0

Data la firma const maxAverage = (league, teams) => ..., codice seguente dovrebbe corrispondere gli argomenti attesi (non sono sicuro circa la logica di business però):

maxAverage(
  this.state.selectedLeague,
  [this.state.selectedHomeTeam, this.state.selectedAwayTeam]
)
Risposto il 27/10/2019 a 11:40
fonte dall'utente

voti
0

Che cosa è un 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

Risposto il 27/10/2019 a 12:06
fonte dall'utente

voti
0

Ho guardato il tuo secondo demo e penso che si hanno due scelte per ottenere la squadra corretta selezionata e si può riutilizzare il metodo getAverage precedente per entrambi. O

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

in alternativa, si potrebbe tenere il codice maxAverage originale e cambiare il modo di implementare il valore campionato ad es.

            <p>           
              Stronger Team:
              {maxAverage(scores[this.state.selectedLeague], [
                this.state.selectedHomeTeam,
                this.state.selectedAwayTeam
              ])}
            </p>
Risposto il 29/10/2019 a 13:14
fonte dall'utente

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