이번 글에서는 숫자 배열을 입력받아 짝수를 오름차순으로 먼저 정렬하고, 이어서 홀수를 오름차순으로 정렬하는 JavaScript 함수를 작성해 보겠습니다.
예를 들어, 입력 배열이 다음과 같다면 −
const arr = [2, 5, 2, 6, 7, 1, 8, 9];
기대하는 출력 결과는 다음과 같습니다 −
const output = [2, 2, 6, 8, 1, 5, 7, 9];
구현 코드
다음은 위 조건을 만족하도록 구현한 코드입니다 −
const arr = [2, 5, 2, 6, 7, 1, 8, 9];
const isEven = num => num % 2 === 0;
const sorter = ((a, b) => {
if(isEven(a) && !isEven(b)){
return -1;
};
if(!isEven(a) && isEven(b)){
return 1;
};
return a - b;
});
const oddEvenSort = arr => {
arr.sort(sorter);
};
oddEvenSort(arr);
console.log(arr);코드 설명
- isEven: 전달받은 숫자가 짝수인지 판별하는 화살표 함수입니다. 숫자를 2로 나눈 나머지가 0이면 짝수로 간주합니다.
- sorter: 배열의 sort() 메서드에 전달되는 비교 함수입니다. 한쪽 요소가 짝수이고 다른 쪽이 홀수라면 짝수를 앞으로 배치하고(-1 또는 1 반환), 두 요소의 홀짝 여부가 같다면 값의 차이(a - b)를 반환해 오름차순으로 정렬합니다.
출력 결과
콘솔에 출력된 결과는 다음과 같습니다 −
[ 2, 2, 6, 8, 1, 5, 7, 9 ]
이처럼 Array.prototype.sort()에 커스텀 비교 함수만 잘 정의하면, 별도의 추가 배열이나 복잡한 로직 없이도 원하는 정렬 규칙(짝수 우선 + 오름차순)을 손쉽게 구현할 수 있습니다.