3
respostas

Como juntar um array de objetos com informações iguais ?

Preciso somar a idade dos jogadores do mesmo clube e mostrar a media. Ex:pegar todos jogadores do Barcelona, somar a idade de todos eles e depois mostrar a media de idade desses jogadores. Precisa fazer isso para todos os times do array. O array é extenso, por isso coloquei só um pedaço dele.

Qual jeito mais fácil de fazer, eu tentei filter e reducer, mas não deu certo.

"jogador": [

{
  "team": "Barcelona",
  "player": "Lionel Messi",
  "age": 33,
  "id": 2
},
{
  "team": "Barcelona",
  "player": "Gerard Piqué",
  "age": 34,
  "id": 3
},
{
  "team": "Juventus",
  "player": "Cristiano Ronaldo",
  "age": 27,
  "id": 4
},
{
  "team": "Juventus",
  "player": "Gianluigi Buffon",
  "age": 43,
  "id": 5
},
]
3 respostas

O jeito mais pratico é utilizando um filter e depois um reducer (como você falou anteriormente). aqui está uma amostra de código que utiliza os dois métodos para esse problema. Lembrando que no filter a condição de retorno fica a critério do nome do time que o usuário escolher.

const test = () => {
  let mesmoTime = [];
  let somatoriaIdade = 0;
  let jogador = [
    {
      team: "Barcelona",
      player: "Lionel Messi",
      age: 33,
      id: 2,
    },
    {
      team: "Barcelona",
      player: "Gerard Piqué",
      age: 34,
      id: 3,
    },
    {
      team: "Juventus",
      player: "Cristiano Ronaldo",
      age: 27,
      id: 4,
    },
    {
      team: "Juventus",
      player: "Gianluigi Buffon",
      age: 43,
      id: 5,
    },
  ];

  mesmoTime = jogador.filter((element) => {
    return element.team === "Barcelona";
  });

  //console.log(mesmoTime);

  somatoriaIdade = mesmoTime.reduce((acc, element) => {
    return (acc += element.age);
  }, 0);

  //console.log(somatoriaIdade);

  let mediaIdade = somatoriaIdade / mesmoTime.length;

  //console.log(mediaIdade)

  return mediaIdade;
};

console.log(test());

Você poderia mostrar como utilizou o reducer e o filter no código para decifrarmos o que deu de errado? =D

Obrigado Nathan, mas na verdade é uma API que você faz um fetch e tem que mostrar as informações na tela, não tem como o usuário escolher o time.

Nesse caso depois do fetch você tera que utilizar multiplos filters com cada nome de time e depois realizar o reduce