배열에 담긴 숫자들을 조건에 따라 가공해야 하는 경우가 종종 있습니다. 이번 글에서는 배열의 모든 요소를 홀수로 만드는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
문제 정의
숫자 배열을 입력받아 다음 규칙에 따라 각 요소를 변환한 뒤, 새로운 배열을 반환하는 함수를 작성해야 합니다.
- 요소가 홀수라면 그대로 유지합니다.
- 요소가 짝수라면 1을 빼서 홀수로 만듭니다.
예를 들어, [5, 23, 6, 3, 66, 12, 8]이라는 배열이 주어지면 결과는 [5, 23, 5, 3, 65, 11, 7]이 되어야 합니다.
구현 예시
가장 기본적인 방법은 반복문과 나머지 연산자(%)를 활용하는 것입니다.
const arr = [5, 23, 6, 3, 66, 12, 8];
const reduceToOdd = (arr = []) => {
const res = [];
for (let i = 0; i < arr.length; i++) {
const el = arr[i];
if (el % 2 === 1) {
res.push(el);
} else {
res.push(el - 1);
}
}
return res;
};
console.log(reduceToOdd(arr));
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[ 5, 23, 5, 3, 65, 11, 7 ]
더 간결한 방법: map() 활용하기
반복문 대신 Array.prototype.map() 메서드를 사용하면 코드를 훨씬 간결하게 작성할 수 있습니다.
const reduceToOdd = (arr = []) =>
arr.map(el => (el % 2 === 0 ? el - 1 : el));
console.log(reduceToOdd([5, 23, 6, 3, 66, 12, 8]));
// [ 5, 23, 5, 3, 65, 11, 7 ]
map()은 원본 배열을 변경하지 않고 새로운 배열을 반환하므로, 부작용(side effect) 없이 안전하게 데이터를 변환할 수 있다는 장점이 있습니다.
정리
- 나머지 연산자
%를 사용해 짝수와 홀수를 판별할 수 있습니다. - 짝수에서 1을 빼면 항상 홀수가 되므로 별도의 복잡한 로직이 필요하지 않습니다.
- 간결성과 가독성을 고려한다면
map()을 사용한 방식이 권장됩니다.