Выбор ответа 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 делает копию первых трёх.
Варианты ответа
- Ничего:
sliceсоздаёт копию, и исходный массивscoresне меняется sortсортирует исходный массив на месте, иscoresтоже станет отсортированправильный ответ- Компаратор
b - aсортирует по возрастанию, и наверху окажутся худшие 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 ошибок.