Сортировка лишь нечётных элементов массива

Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.

Короткий ответ

Что ответить на собеседовании

Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо написать функцию sortOdd, которая упорядочит все нечётные числа в переданном массиве по возрастанию, не меняя при этом позиции чётных чисел.

function sortOdd(array) {
  return;
}

console.log(sortOdd([7, 1]));                    // [1, 7]
console.log(sortOdd([5, 8, 6, 3, 4, 41]));       // [3, 8, 6, 5, 4, 41]
console.log(sortOdd([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])); // [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]

Ответ

Отберите нечётные числа, отсортируйте их по возрастанию и подставьте обратно только на нечётные позиции по значению. Чётные элементы останутся на своих местах.

function sortOdd(array) {
  const odd = array.filter(value => value % 2 !== 0).sort((a, b) => a - b);
  let index = 0;
  return array.map(value => value % 2 !== 0 ? odd[index++] : value);
}

Условие % 2 !== 0 работает и для отрицательных нечётных чисел, в отличие от сравнения с 1. Исходный массив не меняется: sort вызывается на результате filter. Для k нечётных элементов время O(n + k log k), память O(n + k) с учётом результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее