Tengo un conjunto de datos que parece

[
  {
    "title": "Appintment one",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-25T14:48:00.000Z",
    "end": "2021-01-28T14:48:00.000Z",
  },
  {
    "title": "Appintment two",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-26T14:48:00.000Z",
    "end": "2021-01-28T14:48:00.000Z",
  },
  {
    "title": "Appintment four",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-26T14:48:00.000Z",
    "end": "2021-01-26T14:48:00.000Z",
  }
]

Estos datos son dinámicos, por lo que puedo tener 1 o más de 100 citas. Lo que estoy tratando de lograr es crear un objeto donde la clave tenga el formato start y el valor sea una matriz que contenga las citas para ese día.

Entonces, para lo anterior sería algo como

    {
25-01-2021: [
{
    "title": "Appintment one",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-25T14:48:00.000Z",
    "end": "2021-01-28T14:48:00.000Z",
  }],
26-01-2021: [
{
    "title": "Appintment two",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-26T14:48:00.000Z",
    "end": "2021-01-28T14:48:00.000Z",
  },
  {
    "title": "Appintment four",
    "allDay": false,
    "operators": [
      "600510d6d0ee8475bcb6de34"
    ],
    "start": "2021-01-26T14:48:00.000Z",
    "end": "2021-01-26T14:48:00.000Z",
  }
]

}

Hasta ahora solo logro obtener la fecha formateada como clave, pero el valor es un objeto, por lo que solo contiene una cita por clave ...

Mi código (usando el momento):

data.reduce((acc,curr)=> 
                (acc[moment(curr.start).format('DD-MM-YYYY')]=curr,acc),{});
1
MMXX11 22 ene. 2021 a las 08:06

1 respuesta

La mejor respuesta

Puede utilizar array#reduce para agrupar sus datos según las fechas.

const data = [ { "title": "Appintment one", "allDay": false, "operators": [ "600510d6d0ee8475bcb6de34" ], "start": "2021-01-25T14:48:00.000Z", "end": "2021-01-28T14:48:00.000Z", }, { "title": "Appintment two", "allDay": false, "operators": [ "600510d6d0ee8475bcb6de34"], "start": "2021-01-26T14:48:00.000Z", "end": "2021-01-28T14:48:00.000Z", }, { "title": "Appintment four", "allDay": false, "operators": [ "600510d6d0ee8475bcb6de34" ], "start": "2021-01-26T14:48:00.000Z", "end": "2021-01-26T14:48:00.000Z", } ],
      groupedByDate = data.reduce((r, o) => {
        const key = moment(o.start).format('DD-MM-YYYY')
        r[key] = r[key] || [];
        r[key].push(o);
        return r;
      },{});
console.log(groupedByDate);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>
2
Hassan Imam 22 ene. 2021 a las 05:12