Объясните как работает код сортировки

102
11 июля 2021, 16:50

let users = [ 
  { name: "John", age: 20, surname: "Johnson" }, 
  { name: "Pete", age: 18, surname: "Peterson" }, 
  { name: "Ann", age: 19, surname: "Hathaway" } 
]; 
 
function byField(field) { 
  return (a, b) => a[field] > b[field] ? 1 : -1; 
} 
users.sort(byField('name')); 
 
 
users.forEach(user => console.log(user.name));

  1. field передается 'name' и находится в users;
  2. Но как происходит сортировка в стрелочной функции если в параметры а,b ничего не передавали ?
Answer 1

Помимо всего прочего в функциональном программировании есть такое понятие функция высшего порядка (high order function).

Функция высшего порядка - это функция принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата.

Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты.

—-

Теперь о Вашем коде, функция byField -функция высшего порядка, которая возвращает стрелочную функцию с двумя входными аргументами a и b.

В свою очередь функция массива sort тоже функция высшего порядка которая принимает в качестве аргумента функцию.

Алгоритм сортировки,реализованный в методе sort, грубо говоря, перебирает пары значений и делает перестановки.

Функция, которую Вы передаете будет применяться к парам значений в процессе сортировки, для выяснения факта, какое значение в исследуемой паре больше.

—-

PS: Если Вы добавите логгирование в стрелочную функцию, которую Вы передаете в метод сортировки, Вы увидите сколько раз и с какими аргументами она вызвалась во время этой сортировки.

READ ALSO
Передача данных в comboBox

Передача данных в comboBox

С помощью combobox пытаюсь изменять размер изображениеДелаю это вот таким образом

126
Реверс инжиниринг

Реверс инжиниринг

Доброго времени суток!

100
Не могу наследовать класс QNetworkReply

Не могу наследовать класс QNetworkReply

Всем приветВторой день бьюсь головой и не могу наследоваться от класса QNetworkReply

83
asio::thread_pool + std::promise — почему-то много VSZ

asio::thread_pool + std::promise — почему-то много VSZ

Есть такой простой пример, в котором происходит использование пула на 70 потоков и создание в каждом std::promise:

81