Skip to content
Advertisement

Get Min date and Max date from Object

How can I find out the min and the max date from an object? Currently, I am getting an array like this: min date should be ‘2010-02-24’ and max date should be ‘2022-10-04’.

Is there any built-in function to do this? Thanks in advance.

{
       "2010":[
          {
             "id":1243,
             "eventName":"sample_01",
             "categoryType":"CUSTOM_NOTES",
             "tags":"tag19",
             "startDate":"2010-02-24",
             "endDate":"2010-02-26",
             "attachments":[
                
             ]
          }
       ],
       "2022":[
          {
             "id":1244,
             "eventName":"sample_02",
             "categoryType":"CUSTOM_NOTES",
             "tags":"tag1, tag12, tag3, tag52, tag19",
             "startDate":"2022-10-04",
             "endDate":"2022-12-12",
             "attachments":[
                
             ]
          },
          {
             "id":1245,
             "eventName":"hello_03",
             "categoryType":"CUSTOM_NOTES",
             "tags":"tag1, tag12",
             "startDate":"2022-06-01",
             "endDate":"2010-06-26",
             "attachments":[
                
             ]
          }
       ]
    }


filterEventsByDates = () => {
    const filterDateFn = (a, b) => a.startDate.localeCompare(b.startDate);
  setDateFiltersToState(filterDateFn);
}

setDateFiltersToState = (filterDateFn) => {
  this.setState(state => {
   const events = {};
   for (const [year, items] of Object.entries(state.events)) {
     events[year] = items.slice().filter(filterDateFn);
   }
  return { events };
 });
}

Advertisement

Answer

A sort will do the job here, by packing all dates into an array first:

const values = {
   "2010":[
      {
         "id":1243,
         "eventName":"sample_01",
         "categoryType":"CUSTOM_NOTES",
         "tags":"tag19",
         "startDate":"2010-02-24",
         "endDate":"2010-02-26",
         "attachments":[

         ]
      }
   ],
   "2022":[
      {
         "id":1244,
         "eventName":"sample_02",
         "categoryType":"CUSTOM_NOTES",
         "tags":"tag1, tag12, tag3, tag52, tag19",
         "startDate":"2022-10-04",
         "endDate":"2022-12-12",
         "attachments":[

         ]
      },
      {
         "id":1245,
         "eventName":"hello_03",
         "categoryType":"CUSTOM_NOTES",
         "tags":"tag1, tag12",
         "startDate":"2022-06-01",
         "endDate":"2010-06-26",
         "attachments":[

         ]
      }
   ]
};

// include startDate only
const dates = Object.values(values).flatMap(v =>
    v.map(({startDate}) => startDate)).sort();

console.log(dates[0], dates.pop());

// include startDate and endDate
const datesAny = Object.values(values).flatMap(v =>
    v.flatMap(({startDate, endDate}) => [startDate, endDate])).sort();

console.log(datesAny[0], datesAny.pop());
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement