Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

217
Visualizações
Find average number from an array of objects based from a string value

I have an array of objects like this:

const test = [
{
 "id": "1"
 "date": "2022-03-11 21:00:00"
 "temp": "200",
 "desc": "light clouds"
},
{
 "id": "2"
 "date": "2022-03-11 22:00:00"
 "temp": "220",
 "desc": "light clouds"
},
{
 "id": "3"
 "date": "2022-03-11 23:00:00"
 "temp": "205",
 "desc": "rainy clouds"
},
{
 "id": "4"
 "date": "2022-03-12 21:00:00"
 "temp": "180",
 "desc": "light clouds"
},
{
 "id": "5"
 "date": "2022-03-12 22:00:00"
 "temp": "200",
 "desc": "rainy"
},
{
 "id": "6"
 "date": "2022-03-12 23:00:00"
 "temp": "200",
 "desc": "rainy"
},
]

What I want to do is to map over these objects and find the average temp for each day with the same date. And then also find the desc which appears the most times for that date too.

I am not really sure where to even begin, I am guessing I will have to use a map() function and then .find() but unsure of the syntax.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You can do it with one reduce method:

const test = [
  { "id": "1","date": "2022-03-11 21:00:00", "temp": "200", "desc": "light clouds" },
  { "id": "2", "date": "2022-03-11 22:00:00", "temp": "220", "desc": "light clouds" },
  {  "id": "3", "date": "2022-03-11 23:00:00", "temp": "205", "desc": "rainy clouds" },
  { "id": "4", "date": "2022-03-12 21:00:00", "temp": "180","desc": "light clouds"},
  {"id": "5", "date": "2022-03-12 22:00:00", "temp": "200","desc": "rainy"},
  { "id": "6", "date": "2022-03-12 23:00:00",  "temp": "200", "desc": "rainy" },
];

const result = test.reduce((accumulator, currentItem) => {
  const day = currentItem.date.substring(0, 10);
  if(!accumulator[day]){
    accumulator[day] = {
      count: 1,
      total_temp: parseInt(currentItem.temp),
      descriptions:[{count:1, description: currentItem.desc}]
    }
  } else {
    accumulator[day].count += 1;
    accumulator[day].total_temp +=  parseInt(currentItem.temp);
    const index = accumulator[day].descriptions.findIndex((item)=> item.description === currentItem.desc);
    if(index !== -1) {
       accumulator[day].descriptions[index].count += 1;
    } else {
      accumulator[day].descriptions.push({count:1, description: currentItem.desc});
    }
  }
  accumulator[day].average_temp = accumulator[day].total_temp/accumulator[day].count;
  return accumulator;
}, {});

console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda