Объяснение работы кода!

Условие: Вам будет дан массив чисел. Вам нужно отсортировать нечетные числа в порядке возрастания, оставив четные числа на своих исходных позициях.

function sortArray(array) {
  const odd = array.filter((x) => x % 2).sort((a,b) => a - b);
  return array.map((x) => x % 2 ? odd.shift() : x);
}

console.log( sortArray([5, 3, 2, 8, 1, 4]) );

Объясните как работает этот код, что он делает я знаю, но в частности меня интересует часть строки odd.shift() мы убираем 1 элемент. из массива odd, но как это меняет наш array. Как и что перемещает элементы в массиве, так как нужно?


Ответы (1 шт):

Автор решения: CrazyElf

Всё просто. Метод shift() удаляет первый элемент из массива и возвращает его значение. Поэтому тут происходит следующее:

  • Сначала мы отбираем через filter только нечётные числа, сортируем их через sort и помещаем в массив odd
  • Потом ещё раз проходимся по исходному массиву array с помощью map, при этом:
    • Когда встречаем чётное число x, возвращаем его как есть
    • Когда встречаем нечётное x, то возвращаем вместо него очередное число из массива odd через odd.shift() (то есть уже в отсортированном порядке)

Исходный массив array это никак не меняет, это формирует новый массив, который возвращается из функции через return после обработки массива array функцией map.

→ Ссылка