Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 배열 요소를 특정 숫자와 비교해 크고 작은 개수 세기

다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.

const arr = [3, 5, 5, 2, 23, 4, 7, 8, 8, 9];

우리가 작성해야 할 함수는 이 배열과 하나의 숫자 n을 입력받아, 배열의 요소 중 n보다 큰 값과 작은 값이 각각 몇 개인지 나타내는 객체를 반환하는 것입니다.

배열을 한 번만 순회하면서 두 가지 카운트를 동시에 구할 수 있도록 reduce() 메서드를 활용해 보겠습니다. 초기값으로 greater(큰 수의 개수)와 smaller(작은 수의 개수)를 0으로 설정하고, 각 요소를 비교하며 카운트를 누적하는 방식입니다.

예제

코드는 다음과 같습니다.

const arr = [3, 5, 5, 2, 23, 4, 7, 8, 8, 9];
const smallerLargerNumbers = (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(smallerLargerNumbers(arr, 3));

위 코드에서 주목할 점은, num과 정확히 일치하는 값은 어느 쪽 카운트에도 포함되지 않는다는 것입니다. 예제에서 기준값이 3이므로 배열의 첫 번째 요소인 3은 제외됩니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

{ greater: 8, smaller: 1 }

즉, 배열 전체 10개 요소 중 기준값 3보다 큰 수는 8개, 작은 수는 1개라는 의미입니다. 이처럼 reduce()를 사용하면 별도의 반복문 없이도 깔끔하게 집계 로직을 구현할 수 있습니다.