Я читал похожие решенные задачи, но не мог понять, как применить это в моем случае.
Итак, у меня есть несортированный массив объектов:
const queues = [
{"floor":2,"direction":"REQUEST_FLOOR"},
{"floor":1,"direction":"REQUEST_FLOOR"},
{"floor":5,"direction":"CALL_DOWN"},
{"floor":8,"direction":"CALL_DOWN"},
{"floor":7,"direction":"REQUEST_FLOOR"},
{"floor":6,"direction":"CALL_DOWN"}
];
I Я хотел бы отсортировать его по:
const queues = [
{"floor":1,"direction":"REQUEST_FLOOR"},
{"floor":2,"direction":"REQUEST_FLOOR"},
{"floor":7,"direction":"REQUEST_FLOOR"},
{"floor":8,"direction":"CALL_DOWN"},
{"floor":6,"direction":"CALL_DOWN"},
{"floor":5,"direction":"CALL_DOWN"},
];
Итак, правила приоритета, которые я хочу применить, следующие:
- Сортировать сначала «REQUEST_FLOOR», а затем только «CALL_DOWN».
- Сортировка «REQUEST_FLOOR» по возрастанию и «CALL_DOWN» по убыванию.
Я могу заставить его работать, разделив его на 2 разных массива, сортируя, а затем объединяя в конце . Вот мой код:
const requestFloors = queues.filter(queue => queue.direction === "REQUEST_FLOOR");
const callDownFloors = queues.filter(queue => queue.direction === "CALL_DOWN");
requestFloors.sort((a,b) => a.floor - b.floor);
callDownFloors.sort((a,b) => b.floor - a.floor);
const newQueues = [...requestFloors,...callDownFloors];
Вопрос: вместо фильтрации + сортировки я хотел бы просто использовать sort (), поэтому, возможно, что-то вроде этого: queues.sort((a,b) => b.direction.localeCompare(a.direction) || a.floor - b.floor );
Однако этот код сортирует направление правильно, но проблема в том, что он по-прежнему сортирует пол по возрастанию в обоих направлениях.
Как добиться того же результата, используя только sort ()? Любая помощь будет принята с благодарностью.