Sort odd and even numbers in different order


You have an array of numbers. Your task is to sort ascending odd numbers and descending even numbers.

Note that zero is even number. If you have an empty array, you need to return it.

Example sortArray([5, 3, 2, 8, 1, 4]) == [1, 3, 8, 4, 5, 2]

배열의 홀수는 오름차순으로, 짝수는 내림차순으로 배열을 정리하는 문제입니다. 홀수와 짝수의 자리는(index) 그대로 지켜야 합니다.

저의 풀이과정은 아래와 같습니다.  - loop를 한 번 돌며 홀수만의 배열, 짝수만의 배열을 만듭니다.  - 두 배열을 조건에 맞게 정렬합니다. (홀수: 오름차순, 짝수: 내림차순)  - 원본 배열을 다시 map으로 돌며, 홀수 / 짝수 차례에 맞게 위 두 배열을 맨 앞요소를 return 합니다.

function sortArray(array) {
  const even = [];
  const odd = [];

  array.forEach(num => {
    num % 2 === 0 ? even.push(num) : odd.push(num);
  });

  even.sort((a, b) => b - a);
  odd.sort((a, b) => a - b);

  return array.map(num => (num % 2 === 0 ? even.shift() : odd.shift()));
}

아래와 같이 filter method를 사용해 풀 수도 있습니다.

function sortArray(array) {
  const odd = array.filter(num => num % 2 !== 0).sort((a, b) => a - b);
  const even = array.filter(num => num % 2 === 0).sort((a, b) => b - a);

  return array.map(el => (el % 2 !== 0 ? odd.shift() : even.shift()));
}