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

Функция top3 портит входной массив

Вопрос

Что не так с функцией?

function top3(scores) {
  return scores.sort((a, b) => b - a).slice(0, 3);
}
const scores = [10, 50, 30, 20];
const best = top3(scores);

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

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

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

Коротко

Правильный ответ: sort сортирует исходный массив на месте, и scores тоже станет отсортирован. sort мутирует массив, на котором вызван, и только потом slice делает копию первых трёх.

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

  1. Ничего: slice создаёт копию, и исходный массив scores не меняется
  2. sort сортирует исходный массив на месте, и scores тоже станет отсортированправильный ответ
  3. Компаратор b - a сортирует по возрастанию, и наверху окажутся худшие
  4. slice(0, 3) вернёт 4 элемента, потому что конец включается в результат

Разбор

sort мутирует массив, на котором вызван, и только потом slice делает копию первых трёх. Вызывающий код получит неожиданно переупорядоченный scores, а в React так ломается состояние. Исправление: scores.toSorted((a, b) => b - a).slice(0, 3) или [...scores].sort(...). Компаратор b - a сортирует по убыванию, это верно. slice(0, 3) берёт индексы 0, 1, 2, то есть три элемента.

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

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