-2

I want to sort my array by date name. This is an example from my array,

let data = [
  {
    day: "Saturday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Sunday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Friday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  }
]

Then I want my array will be like this

let data = [
  {
    day: "Friday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Saturday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Sunday"
    isOpen: false
    description: "07:00 - 18:00 WIB"
  }
]

I have read about sorting function in javascript, but I still cant find how to sort by date name. How can I do that? Thanks.

  • What is "date name"? – trincot Oct 20 '20 at 06:38
  • 1
    Does this answer your question? [Sort array of objects by string property value](https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value) – Elad Oct 20 '20 at 06:38

2 Answers2

1

You can create an array for maintaining the order of the days. Then iterate this array & use filter to get the matched day from data array. Array filter will return an array, so using spread syntax to get the content & pushing it to the sorted array.

const dateOrder = ['Friday', 'Saturday', 'Sunday']
let data = [{
    day: "Saturday",
    isOpen: false,
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Sunday",
    isOpen: false,
    description: "07:00 - 18:00 WIB"
  },
  {
    day: "Friday",
    isOpen: false,
    description: "07:00 - 18:00 WIB"
  }
];
let sorted = [];
dateOrder.forEach((item) => {
  sorted.push(...data.filter(elem => elem.day === item));
  
});

console.log(sorted)
brk
  • 43,022
  • 4
  • 37
  • 61
  • I know this way is better than `.sort`, but if you could share a reference link for readers, it'll be great – Rajesh Oct 20 '20 at 06:52
1

Try this:

data.sort((a, b) => a.day>b.day)

(MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)

// Edit How abt this?

let weekDays = { Mon: 0, Tue: 1, Wed: 2, Thu: 3, Fri: 4, Sat: 5, Sun: 6, }
data.sort((a, b) => weekDays[a.day.slice(0, 3)] > weekDays[b.day.slice(0, 3)])
locomoco
  • 71
  • 6