Выбор ответа Junior Разминка: короткие функции обновлено

Сортировка по двум полям

Вопрос

Как отсортирует пользователей этот компаратор?

users.toSorted((a, b) => a.age - b.age || a.name.localeCompare(b.name, 'ru'));

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: По возрасту по возрастанию, а при равном возрасте по имени. Если возраст разный, a.age - b.age даёт ненулевое число, оно истинно, и возвращает его: порядок определяет возраст.

Варианты ответа

  1. По возрасту по возрастанию, а при равном возрасте по имениправильный ответ
  2. Только по имени: || вернёт результат localeCompare
  3. По имени по алфавиту, а при одинаковых именах по возрасту
  4. Выбросит ошибку: компаратор должен вернуть ровно -1, 0 или 1

Разбор

Если возраст разный, a.age - b.age даёт ненулевое число, оно истинно, и || возвращает его: порядок определяет возраст. Если возраст одинаковый, разность равна 0, она ложна, и || переходит к сравнению имён. Так удобно записывать сортировку по нескольким ключам. Компаратор может возвращать любое число, важен только знак. localeCompare с 'ru' правильно ставит, например, «ё» рядом с «е».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.