Вам нужно задать пользовательскую функцию сравнения для .sort
сортировки по месяцу и году.
const events = [
{
year: "2019",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2019",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2019",
month: "July",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "March",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "March",
title: "title",
desc: "desc"
}
];
// Custom comparator function
function sortByMonthYear(a, b) {
const keyA = `${a.month} ${a.year}`;
const keyB = `${b.month} ${b.year}`;
if (keyA.localeCompare(keyB)) {
return -1;
}
else if (keyA === keyB) {
return 0;
}
return 1;
}
const grouping = events.sort(sortByMonthYear);
console.log(grouping);
Обновление:
Вы также можете группировать свои данные, используя Array#prototype#reduce
const events = [{
year: "2019",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2019",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2019",
month: "July",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "June",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "March",
title: "title",
desc: "desc"
},
{
year: "2018",
month: "March",
title: "title",
desc: "desc"
}
];
const grouping = events.reduce((acc, curr) => {
const key = `${curr.month} ${curr.year}`;
if (!acc[key]) {
acc[key] = [curr];
} else {
acc[key].push(curr);
}
return acc;
}, {});
console.log(grouping);