Я хочу отсортировать массив объектов по времени получения, но мне нужно, чтобы время было отформатировано, как в массиве ниже после сортировки. Очевидно, проблема, с которой я сталкиваюсь, заключается в том, что вы не можете использовать .sort() для сортировки строк, как вы можете использовать целые числа.
Есть ли способ отсортировать их с самого раннего времени до самого последнего, используя .sort()? Или, если нет, есть ли способ отформатировать их как целые числа, а затем переформатировать и вернуть их на соответствующие места в объекте?
[{pickupTime='10:30 AM', pickupTime='4:00 AM', pickupTime='6:30 AM',pickupTime='12:00 PM',pickupTime='1:00 PM'}, [{pickupTime='9:00 AM',pickupTime='6:00 PM', pickupTime='4:00 PM', pickupTime='8:00PM'}, {pickupTime='4:00 PM', pickupTime='7:00PM', pickupTime='5:30 PM'}]
Это то, что я использую для их форматирования в сценариях приложений.
for(var k = 0 ; k < abc.length ; k++){
let singleDelivery = sourceRange[abc[k]];
let pickTime = new Date(singleDelivery[8])
let pickTime2 = Utilities.formatDate(pickTime, "EST", 'h:mm a');
let dropTime = new Date(singleDelivery[10]);
let dropTime2 = Utilities.formatDate(dropTime, "EST", 'h:mm a');
let deliveryDetailsArray = {
"orderName": singleDelivery[1],
"driverName": singleDelivery[2],
"deliveryDate" : singleDelivery[7],
"pickupTime": pickTime2,
"dropoffTime": dropTime2,
"pickUpAddress": singleDelivery[11],
"dropoffAddress": singleDelivery[12],
"routingType": singleDelivery[13]
}
deliveryDetails.push(deliveryDetailsArray);
sorted = deliveryDetails.sort((a, b) => a.pickupTime - b.pickupTime)
}
Пока не форматируйте дату при объявлении devlieryDetailsArray
, сохраните ее как pickTime
необработанный объект даты (из вашего кода я точно не знаю, что это обычная дата JS, но я так предполагаю).
Сортируйте, а потом отформатируйте.
const sorted = deliveryDetails.sort((a,b) => a.pickupTime - b.pickupTime);
const formattedDeliveryDetails = sorted.map(deliveryDetail => ({...deliveryDetail, pickupTime: Utilities.formatDate(deliveryDetail.pickupTime, "EST", 'h:mm a') }));
Спасибо. Не могу поверить, как долго я работал над этим и так и не понял, лол.