Tengo una serie de objetos de citas:
let appointments = [ { _id: 54321, name: 'app 1', date: "2022-01-20T09:00:00+01:00"}, { _id: 66756, name: 'app 2', date: "2022-01-20T08:00:00+01:00"}, { _id: 76889, name: 'app 3', date: "2022-01-21T08:00:00+01:00"}, { _id: 35790, name: 'app 4', date: "2022-01-22T08:00:00+01:00"}, { _id: 35790, name: 'app 5', date: "2022-01-25T09:00:00+01:00"} ]mi objetivo es crear una nueva matriz basada en los días de las citas y colocarlas dentro, así:
{ days: { 2022-01-20: [ { _id: 54321, name: 'app 1', date: "2022-01-20T09:00:00+01:00"}, { _id: 66756, name: 'app 2', date: "2022-01-20T08:00:00+01:00"} ]}, { 2022-01-21: [ { _id: 76889, name: 'app 3', date: "2022-01-21T08:00:00+01:00"} ]}, { 2022-01-22: [ { _id: 35790, name: 'app 4', date: "2022-01-22T08:00:00+01:00"} ]}, { 2022-01-23: []}, { 2022-01-24: []}, { 2022-01-25: [ { _id: 35790, name: 'app 5', date: "2022-01-25T09:00:00+01:00"} ]}, }Los primeros 10 caracteres de 'fecha' podrían convertirse en los nuevos valores (excluyendo los duplicados) y dentro de ellos deberían estar las citas adecuadas, ya que están en la fuente, solo organizadas por días.
Otra característica que estoy tratando de hacer es insertar días vacíos entre los días activos (ejemplo en el segundo código)
Gracias por tu ayuda
const appointments = [ { _id: 54321, name: 'app 1', date: "2022-01-20T09:00:00+01:00"}, { _id: 66756, name: 'app 2', date: "2022-01-20T08:00:00+01:00"}, { _id: 76889, name: 'app 3', date: "2022-01-21T08:00:00+01:00"}, { _id: 35790, name: 'app 4', date: "2022-01-22T08:00:00+01:00"}, { _id: 35790, name: 'app 5', date: "2022-01-25T09:00:00+01:00"} ]; const appointmentsByDate = appointments.reduce( (acc, appointment) => { // split the date string and store index 0 as date variable. const [date] = appointment.date.split('T'); return { ...acc, // overwrite or add date key to the accumulator. // if the date key already exists, spread the existing value into the new value [date]: [...(acc[date] || []), appointment], }; }, {} // starting accumulator (acc) value ); console.log(appointmentsByDate);