문제 상황
다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.
const arr = [3, 5, 5, 2, 23, 4, 7, 8, 8, 9];
우리는 이 배열과 하나의 숫자 n을 입력받아, n보다 큰 요소의 개수와 n보다 작은 요소의 개수를 각각 담은 객체를 반환하는 JavaScript 함수를 작성해야 합니다.
코드 예시
reduce() 메서드를 활용하면 배열을 단 한 번의 순회로 처리하면서 두 개수를 동시에 계산할 수 있습니다. 다음은 실제 구현 코드입니다.
const arr = [3, 5, 5, 2, 23, 4, 7, 8, 8, 9];
const greaterSmallerNumbers = (arr, num) => {
return arr.reduce((acc, val) => {
let { greater, smaller } = acc;
if(val > num){
greater++;
};
if(val < num){
smaller++;
};
return { greater, smaller };
}, {
greater: 0,
smaller: 0
});
};
console.log(greaterSmallerNumbers(arr, 3));
코드 설명
이 함수는 reduce() 메서드를 사용해 배열 전체를 한 번만 순회합니다. 초기 누적값으로 greater와 smaller 속성을 0으로 설정한 객체를 지정하고, 각 요소를 기준 숫자와 비교하며 조건에 맞는 카운트를 증가시킵니다. 모든 요소를 처리한 후에는 최종 누적 객체가 그대로 반환됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
{ greater: 8, smaller: 1 }위 예제에서 기준 숫자는 3입니다. 3보다 큰 요소는 5, 5, 23, 4, 7, 8, 8, 9로 총 8개이고, 3보다 작은 요소는 2 하나뿐입니다. 따라서 { greater: 8, smaller: 1 }이라는 결과가 반환됩니다. 참고로 배열에 기준 숫자와 같은 값이 있으면 greater와 smaller 어느 쪽에도 포함되지 않으므로, 필요하다면 equal 카운트를 추가하는 방식으로 확장할 수도 있습니다.