2

I have some weekday-based data as follows:

[{
    "dayOfWeek": "TUESDAY",
    "startTime": "19:30:00",
    "endTime": "21:15:00"
}, {
    "dayOfWeek": "SATURDAY",
    "startTime": "19:15:00",
    "endTime": "21:00:00"
}, {
    "dayOfWeek": "FRIDAY",
    "startTime": "19:00:00",
    "endTime": "20:15:00"
}, {
    "dayOfWeek": "THURSDAY",
    "startTime": "19:15:00",
    "endTime": "20:30:00"
}, {
    "dayOfWeek": "WEDNESDAY",
    "startTime": "19:30:00",
    "endTime": "20:45:00"
}, {
    "dayOfWeek": "SUNDAY",
    "startTime": "19:30:00",
    "endTime": "20:45:00"
}, {
    "dayOfWeek": "MONDAY",
    "startTime": "19:30:00",
    "endTime": "21:00:00"
}]

However, this data comes from an API with irregular sorting which cannot be trusted. I need to resort this array with values from MONDAY to SUNDAY, descending. How can I do that? I assume I have to set up some kind of map for lookup?

j_d
  • 2,818
  • 9
  • 50
  • 91
  • 1
    Right, make an object whose keys are the day names and whose values are 0 through 6 (or 1 through 7 or whatever you want) and then use that in your `.sort()` comparator function. – Pointy Feb 16 '17 at 14:24
  • See the duplicate I marked for an example of what @Pointy mentioned – Rory McCrossan Feb 16 '17 at 14:25
  • 1
    Actually this duplicate is more fitting for your needs: http://stackoverflow.com/questions/34066752/sort-object-of-weekdays-like-sunday-monday-saturday – Rory McCrossan Feb 16 '17 at 14:26

1 Answers1

2

You could use an object, with the days and a value for sorting.

var array = [{ dayOfWeek: "TUESDAY", startTime: "19:30:00", endTime: "21:15:00" }, { dayOfWeek: "SATURDAY", startTime: "19:15:00", endTime: "21:00:00" }, { dayOfWeek: "FRIDAY", startTime: "19:00:00", endTime: "20:15:00" }, { dayOfWeek: "THURSDAY", startTime: "19:15:00", endTime: "20:30:00" }, { dayOfWeek: "WEDNESDAY", startTime: "19:30:00", endTime: "20:45:00" }, { dayOfWeek: "SUNDAY", startTime: "19:30:00", endTime: "20:45:00" }, { dayOfWeek: "MONDAY", startTime: "19:30:00", endTime: "21:00:00" }];

array.sort(function (a, b) {
    var sort = { MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6, SUNDAY: 7 };
    return sort[a.dayOfWeek] - sort[b.dayOfWeek];
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392