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

131
Vistas
Combine objetos en una matriz si las fechas son iguales javascript

Tengo una matriz en Javascript y necesito combinar objetos si tienen el mismo recordatorio.fecha

 const tasks = [ { id: 1, title: "call Tom", reminders: { date: "2022-02-01", time: "09:30" } }, { id: 2, title: "Meet Bred", reminders: { date: "2022-02-01", time: "10:30" } }, { id: 3, title: "Mail Susan", reminders: { date: "2022-03-01", time: "19:00" } },

La salida debería ser así

 const combinedTasks = [ { id: 1, tasks: ["call Tom", "Meet Bred"], reminders: { date: "2022-02-01", time: "09:30" } }, { id: 3, tasks: ["Mail Susan"] reminders: { date: "2022-03-01", time: "19:00" } }

Supongo que necesito usar el método Array.reduce pero no tengo idea de cómo hacerlo correctamente

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Aquí hay una forma en que puede lograr esto usando reduce()

 let tasks = [{ id: 1, title: "call Tom", reminders: { date: "2022-02-01", time: "09:30" } }, { id: 2, title: "Meet Bred", reminders: { date: "2022-02-01", time: "10:30" } }, { id: 3, title: "Mail Susan", reminders: { date: "2022-03-01", time: "19:00" } }]; let combinedTasks = tasks.reduce((combined, x) => { // Try to find an existing item in the combined tasks array where the date equals this task item. let match = combined.find(y => y.reminders.date == x.reminders.date); if (match) { // If we find a match, add this task item's title to the combined item's tasks array. match.tasks.push(x.title); } else { // If we didn't find a match, take this task item and turn it into a combined tasks item with a tasks array so that future items in the tasks array can be combined with this one. let copy = { ...x }; copy.tasks = [x.title]; delete copy.title; combined.push(copy); } return combined; }, []); console.log(combinedTasks);

about 4 years ago · Juan Pablo Isaza Denunciar

0

const tasks = [ { id: 1, title: "call Tom", reminders: { date: "2022-02-01", time: "09:30" } }, { id: 2, title: "Meet Bred", reminders: { date: "2022-02-01", time: "10:30" } }, { id: 3, title: "Mail Susan", reminders: { date: "2022-03-01", time: "19:00" } } ] tasks.sort((a,b)=>{ return new Date(a.reminders.date) - new Date(b.reminders.date) }) let output = []; tasks.map((val,index)=>{ if(index===0){ let obj = {} temp = []; temp.push(val.title); obj.id = val.id; obj.tasks = [...temp]; obj.reminders = {...val.reminders}; output.push(obj); }else{ if(output[output.length-1].reminders.date===val.reminders.date){ output[output.length-1].tasks.push(val.title); }else{ let obj = {} temp = []; temp.push(val.title); obj.id = val.id; obj.tasks = [...temp]; obj.reminders = val.reminders; output.push(obj); } } })

Pruebe esta solución, funciona.

 Output : [ { id: 1, tasks: [ 'call Tom', 'Meet Bred' ], reminders: { date: '2022-02-01', time: '09:30' } }, { id: 3, tasks: [ 'Mail Susan' ], reminders: { date: '2022-03-01', time: '19:00' } } ]

La salida de este código es la esperada. Espero que esto sea útil .

about 4 years ago · Juan Pablo Isaza Denunciar

0

tienes razón, tienes que usar el método de reduce .

Úselo para recorrer su matriz inicial. Entonces, para cada tarea, puede ver en su matriz futura si tiene una tarea en la fecha de la tarea actual. De lo contrario, puede crear una nueva tarea y agregar las siguientes tareas más tarde.

 const tasks = [ { id: 1, title: "call Tom", reminders: { date: "2022-02-01", time: "09:30" } }, { id: 2, title: "Meet Bred", reminders: { date: "2022-02-01", time: "10:30" } }, { id: 3, title: "Mail Susan", reminders: { date: "2022-03-01", time: "19:00" } } ]; const combinatedTasks = tasks.reduce((_combinatedTasks, currentTask) => { const currentDate = currentTask.reminders.date; const combinatedTaskAtCurrentDate = _combinatedTasks.find(task => task.reminders.date === currentDate); if (combinatedTaskAtCurrentDate) { combinatedTaskAtCurrentDate.tasks.push(currentTask.title); } else { _combinatedTasks.push({ id: currentTask.id, tasks: [currentTask.title], reminders: currentTask.reminders }); } return _combinatedTasks; }, []); console.log(combinatedTasks);
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