Сортировка массива по нескольким полям на JavaScript
Есть массив:
let arr = [
{'time':'10:00','status':'тест1', 'dday': 'субб'},
{'time':'09:00','status':'тест1', 'dday': 'воскр'},
{'time':'12:00','status':'тест1', 'dday': 'субб'},
{'time':'12:30','status':'тест1', 'dday': 'воскр'},
{'time':'09:00','status':'тест1', 'dday': 'субб'},
{'time':'13:00','status':'тест1', 'dday': 'воскр'},
];
Как его отсортировать, чтобы вначале шла суббота, потом воскресенье, ну и чтобы время было во возрастанию?
Ответы (1 шт):
Автор решения: Alexander Chernin
→ Ссылка
let arr = [
{'time':'10:00','status':'тест1', 'dday': 'субб'},
{'time':'09:00','status':'тест1', 'dday': 'воскр'},
{'time':'12:00','status':'тест1', 'dday': 'субб'},
{'time':'12:30','status':'тест1', 'dday': 'воскр'},
{'time':'09:00','status':'тест1', 'dday': 'субб'},
{'time':'13:00','status':'тест1', 'dday': 'воскр'},
];
// Функция создания даты из строки формата "hh:mm"
const toDate = (value) => {
const d = value.split(':');
return new Date(0, 0, 0, d[0], d[1]);
};
// Функция сравнения дат
const compareDate = (d1, d2) => d1 - d2;
// Дни недели
const wdays = ['понед', 'втор', 'сред', 'чт', 'пятн', 'субб', 'воскр'];
// Результат
let result = [];
// Сортировка
wdays.forEach( day => {
// Получаем все значения для текущего дня недели и сортируем их по времени
const a = arr.filter( a => a['dday'] === day )
.sort( (a, b) => compareDate(toDate(a['time']), toDate(b['time'])));
// Полученный отсортированный массив
if (Array.isArray(a)) {
// Добавляем к результирующему
result = result.concat(a);
}
});
console.log(result);