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

JavaScript로 자릿수가 짝수인 숫자만 추출하는 방법

문제 정의

숫자 배열을 유일한 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열 요소 중 자릿수가 짝수인 숫자들을 모두 골라 새로운 배열로 반환해야 합니다.

예를 들어 입력 배열이 다음과 같다면 −

const arr = [34, 23, 112, 8, 3456, 345];

출력 결과는 다음과 같아야 합니다 −

const output = [34, 23, 3456];

34와 23은 2자리, 3456은 4자리이므로 자릿수가 짝수입니다. 반면 112와 345는 3자리, 8은 1자리이므로 결과에서 제외됩니다.

예제 코드

const arr = [34, 23, 112, 8, 3456, 345];
const countDigits = (num, sum = 0) => {
    if(num){
        return countDigits(Math.floor(num / 10), sum + 1);
    };
    return sum;
};
const isEven = num => num % 2 === 0;
const returnEvens = (arr = []) => {
    const res = arr.filter(el => isEven(countDigits(el)));
    return res;
};
console.log(returnEvens(arr));

코드 설명

countDigits: 재귀 호출을 통해 숫자를 10으로 나눈 몫을 계속 전달하면서 호출 횟수, 즉 자릿수를 셉니다. 기본 매개변수 sum이 카운터 역할을 하며, 숫자가 0이 되면 누적된 값을 반환합니다.

isEven: 모듈로 연산자(%)를 사용해 숫자가 2로 나누어떨어지는지, 즉 짝수인지 판별합니다.

returnEvens: Array.prototype.filter() 메서드로 각 요소의 자릿수가 짝수인 경우만 걸러내어 새로운 배열을 생성합니다.

더 간단한 대안: 문자열 변환 활용

재귀 대신 숫자를 문자열로 변환하면 자릿수를 훨씬 간결하게 구할 수 있습니다.

const returnEvens = (arr = []) =>
  arr.filter(num => String(Math.abs(num)).length % 2 === 0);

console.log(returnEvens([34, 23, 112, 8, 3456, 345])); // [34, 23, 3456]

Math.abs()로 절댓값을 구하면 음수도 부호를 제외한 실제 자릿수 기준으로 올바르게 처리됩니다.

출력 결과

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

[34, 23, 3456]