Sort the odd

Sort the odd

문제

You have an array of numbers. Your task is to sort ascending odd numbers but even numbers must be on their places.

Zero isn't an odd number and you don't need to move it. If you have an empty array, you need to return it.

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

배열의 홀수는 오름차순으로 정렬하되, 짝수는 그 자리를 지키도록 정렬된 배열을 반환하는 문제입니다. 저는 아래와 같이 풀이했습니다.

- 홀수인 요소만 걸러낸 임의의 배열을 생성함. - 원본 배열을 loop하며 홀수를 만날 때, 위에서 filter한 배열의 요소를 순차적으로 입력함.

// ES5
function sortArray(array) {
  var odds = array
    .filter(cur => cur % 2 !== 0)
    .sort(function(a, b) {
      return a - b;
    });
  return array.map(cur => (cur % 2 !== 0 ? odds.shift() : cur));
}

// ES6
function sortArray(array) {
  var odds = array
    .filter(function(cur) {
      if (cur % 2 !== 0) {
        return cur;
      }
    })
    .sort(function(a, b) {
      return a - b;
    });

  return array.map(function(cur) {
    if (cur % 2 !== 0) {
      return odds.shift();
    } else {
      return cur;
    }
  });
}