Свяжите каждое имя с соответствующим ростом по индексу, отсортируйте пары по росту по убыванию и верните только имена. Исходные массивы менять не нужно.
Упорядочивание имён по убывающему росту
Свяжите каждое имя с соответствующим ростом по индексу, отсортируйте пары по росту по убыванию и верните только имена. Исходные массивы менять не нужно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, принимающую два списка — массив имён людей и массив их роста — и возвращающую массив имён, отсортированных по убыванию роста. Например, при входных данных names = ["Иван", "Мария", "Пётр"] и heights = [170, 165, 180] функция должна вернуть ["Пётр", "Иван", "Мария"].
Ответ
Свяжите каждое имя с соответствующим ростом по индексу, отсортируйте пары по росту по убыванию и верните только имена. Исходные массивы менять не нужно.
function sortPeople(names, heights) {
if (names.length !== heights.length) throw new Error('Разная длина массивов');
return names.map((name, index) => ({ name, height: heights[index], index }))
.sort((a, b) => b.height - a.height || a.index - b.index)
.map(item => item.name);
}
Для примера получится Пётр, Иван, Мария. При одинаковом росте явно сохраняется исходный порядок. Предполагаются конечные числовые значения роста. Время O(n log n), память O(n) для пар и результата.