Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

182
Vistas
Add dynamic array objects from filtered data in Javascript - Typescript

I have a dynamic data that I need to order and filter from each year, the data is as follows

years: ['2018', '2019', '2020', '2021', '2022']

[
 [{name: 'event_name1', created_at: 2021-01-12 11:25:0}, {name: 'event_name1', created_at: 2021-01-14 11:25:0}, {name: 'event_name1', created_at: 2020-01-12 11:25:0}, {name: 'event_name1', created_at: 2019-11-12 11:25:0}],

 [{name: 'event_name2', created_at: 2018-01-12 11:25:0}, {name: 'event_name2', created_at: 2018-01-12 11:25:0}, {name: 'event_name2', created_at: 2021-01-12 11:25:0}, {name: 'event_name2', created_at: 2021-11-12 11:25:0},{name: 'event_name2', created_at: 2022-01-12 11:25:0}]
 
... event_name3
]

(I must clarify that the years are taken previously according to the data information).

I have tried several things, using the map and filter methods together with the for structure, however, I am not able to filter the information like this. This is how I want the filtered data

[
{element: 'event_name1',data:[2018:0,2019:1,2020:1,2021:1,2022:0]},
{element: 'event_name2',data:[2018:2,2019:0,2020:0,2021:1,2022:1]}
]
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Looks like a scenario to use the reduce method. Iterate over the events' array and create/modify the appropriate element in the accumulator.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Here you go my friend

const baseYearsInstances = {
  '2018': 0,
  '2019': 0,
  '2020': 0,
  '2021': 0,
  '2022': 0,
};

const test = [
  [
    { name: 'event_name1', created_at: '2021-01-12 11:25:0' },
    { name: 'event_name1', created_at: '2021-01-14 11:25:0' },
    { name: 'event_name1', created_at: '2020-01-12 11:25:0' },
    { name: 'event_name1', created_at: '2019-11-12 11:25:0' },
  ],

  [
    { name: 'event_name2', created_at: '2018-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2018-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2021-01-12 11:25:0' },
    { name: 'event_name2', created_at: '2021-11-12 11:25:0' },
    { name: 'event_name2', created_at: '2022-01-12 11:25:0' },
  ],
];

const eventToDate = (event) => {
  const dataNotSorted = event.map((eventDate) => {
    const year = new Date(eventDate.created_at).getFullYear();
    return year;
  });

  const data = dataNotSorted.reduce(function (acc, curr) {
    return acc[curr] ? ++acc[curr] : (acc[curr] = 1), acc;
  }, {});

  return { element: event[0]?.name, data: { ...baseYearsInstances, ...data } };
};

const result = test.map(eventToDate);

console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

No reduce. But maps and filter.

I assume that the expected data property contains text values.

const data = [[ { name: 'event_name1', created_at: '2021-01-12 11:25:0' },{ name: 'event_name1', created_at: '2021-01-14 11:25:0' },{ name: 'event_name1', created_at: '2020-01-12 11:25:0' },{ name: 'event_name1', created_at: '2019-11-12 11:25:0' }],[{ name: 'event_name2', created_at: '2018-01-12 11:25:0' },{ name: 'event_name2', created_at: '2018-01-12 11:25:0' },{ name: 'event_name2', created_at: '2021-01-12 11:25:0' },{ name: 'event_name2', created_at: '2021-11-12 11:25:0' },{ name: 'event_name2', created_at: '2022-01-12 11:25:0' }]];

const years = ['2018', '2019', '2020', '2021', '2022'];

const result = data.map((arr) => {
   const [{ name: element }] = arr;
   const data = years.map((year) => {
      const count = arr.filter(({ created_at }) => created_at.slice(0, 4) === year).length;
      return `${year}:${count}`;
   });
   
   return { element, data };
})


console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda