Объяснение работы кода!
Условие: Вам будет дан массив чисел. Вам нужно отсортировать нечетные числа в порядке возрастания, оставив четные числа на своих исходных позициях.
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
.