У меня есть массив заказов, и мне нужно отсортировать его на основе атрибута delivery_time
, чтобы вначале можно было обработать самые ранние заказы. Но у нас есть возможность доставить заказ немедленно. Таким образом, независимо от времени доставки, немедленные delivery_method
ордера должны быть в начале массива.
Прямо сейчас я достигаю этого с помощью 2-х функций сортировки, первая сортирует ордера на основе * 1005 атрибут * и второй сортирует массив на основе атрибута delivery_method_id
(delivery_method_id == 1
означает его немедленную доставку). Как я могу достичь того же результата, используя только одну sort
функцию?
orders.sort((a, b) => {
return a.delivery_time - b.delivery_time; //sort based on delivery_time
}).sort((a, b) => {
return a.delivery_method_id === 1 ? -1: 0; //sort based on delivery_method_id
});
Я пытался сохранить оба условия в самой функции первой сортировки, но в этом случае я получаю Срочные заказы на доставку в начальной позиции каждого дня, а не в первой позиции (надеюсь, я четко объясняю это ситуация)
Как можно избежать использования двух функций для сортировки массива заказов? У меня есть подчеркивание. js установлено, если его можно использовать в порядке.
Образцы данных (заказы)
[{
"id": 149677,
"delivery_time": "2020-02-20 19:00:00",
"delivery_method_id": 2
}, {
"id": 149737,
"delivery_time": "2020-02-20 21:00:00",
"delivery_method_id": 2
}, {
"id": 160919,
"delivery_time": "2020-03-12 13:00:00",
"delivery_method_id": 3
},
{
"id": 160920,
"delivery_time": "2020-03-12 13:00:00", // according to delivery time, this should be at the bottom, but because the delivery_method_id == 1 , I need to push this to the top/beginning of array, this is why I had to use 2 sorts
"delivery_method_id": 1
}]