Во-первых, вам не нужен внешний l oop (тот, который считает переменную i
), потому что он вообще не используется.
Я бы предложил изменить Ваша bubbleSort
функция принимает два аргумента: список для сортировки и функцию предиката. Функция предиката должна принимать два аргумента (каждый будет назначением) и возвращать true
/ false
. Используйте результат предиката для сортировки: если предикат возвращает true
, выполните сортировку, в противном случае - нет.
Ниже приведена рабочая реализация. Функции earliest
и mostRecent
являются предикатами.
Примечание. Показанная функция *1015* является чистой , что означает, что вместо изменения данного аргумента списка создается клон из списка и сортирует этот клон. Вы не можете иметь , чтобы сделать это таким образом, если вы не хотите. Тем не менее, я бы посоветовал вам сделать это.
const appointments = [
{
"Appointment": {
"Id": 2,
"nameCustomer": "Henk Jan",
"addresdCustomer": "somethingstreet 34, middleofnowhere",
"time": "2020-01-07T10:00:00Z",
"reason": "gibberish"
}
},
{
"Appointment": {
"Id": 1,
"nameCustomer": "Jan Jaap",
"addresdCustomer": "somethingpavilion 54, middleofnowhere",
"time": "2020-01-07T12:15:00Z",
"reason": "gibberish"
}
},
{
"Appointment": {
"Id": 3,
"nameCustomer": "So Lost",
"addresdCustomer": "somethingthere 234, middleofnowhere",
"time": "2020-01-07T11:30:00Z",
"reason": "gibberish"
}
}
];
// bubbleSort :: Array -> Function -> Array
function bubbleSort(list, predicate) {
const size = list.length - 1; // <-- or last item will produce errors!
const clone = list.slice(); // <-- clone of given list, just to be pure
for(let j = 0; j < size; j++) {
if(predicate(clone[j], clone[j+1])) { // <-- this line
let temp = clone[j];
clone[j] = clone[j+1];
clone[j+1] = temp;
}
}
return clone;
}
// earliest :: Appointment -> Appointment -> Boolean
function earliest (a, b) {
return Date.parse(a.Appointment.time) > Date.parse(b.Appointment.time);
}
// mostRecent :: Appointment -> Appointment -> Boolean
function mostRecent (a, b) {
return Date.parse(a.Appointment.time) < Date.parse(b.Appointment.time);
}
console.log('Earliest', bubbleSort(appointments, earliest))
console.log('Most recent', bubbleSort(appointments, mostRecent))