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

JavaScript에서 첫 글자 알파벳 범위로 배열 필터링하기

다음과 같이 여러 사람의 이름이 담긴 배열이 있다고 가정해 보겠습니다.

const arr = ['Amy','Dolly','Jason','Madison','Patricia'];

우리가 작성해야 할 함수는 첫 번째 인수로 위와 같은 문자열 배열을 받고, 두 번째·세 번째 인수로 각각 소문자 알파벳 하나씩을 받습니다. 그런 다음 배열을 필터링하여, 첫 글자가 두 번째 인수부터 세 번째 인수까지의 알파벳 범위 안에 속하는 요소들만 남겨야 합니다.

예를 들어 두 번째 인수가 'a', 세 번째 인수가 'j'라고 주어지면, 첫 글자가 a부터 j 사이에 있는 이름들만 걸러져 다음과 같은 결과가 나와야 합니다.

const output = ['Amy','Dolly','Jason'];

예제 코드

그럼 실제 코드를 작성해 보겠습니다.

const arr = ['Amy','Dolly','Jason','Madison','Patricia'];
const filterByAlphaRange = (arr = [], start = 'a', end = 'z') => {
    const isGreater = (c1, c2) => c1 >= c2;
    const isSmaller = (c1, c2) => c1 <= c2;
    const filtered = arr.filter(el => {
        const [firstChar] = el.toLowerCase();
        return isGreater(firstChar, start) && isSmaller(firstChar, end);
    });
    return filtered;
};
console.log(filterByAlphaRange(arr, 'a', 'j'));

동작 원리

핵심은 Array.prototype.filter() 메서드입니다. 각 요소의 첫 글자를 toLowerCase()로 소문자로 변환한 뒤, 시작 문자보다 크거나 같고(>=) 끝 문자보다 작거나 같은지(<=) 비교합니다. JavaScript에서 문자열끼리 비교하면 유니코드 코드 포인트 순서로 비교되기 때문에, 별도의 변환 없이도 알파벳 순서대로 자연스럽게 대소 비교가 가능합니다. 또한 구조 분해 할당인 const [firstChar] = el.toLowerCase();를 사용하면 문자열의 첫 글자를 간결하게 추출할 수 있습니다.

출력 결과

콘솔에는 다음과 같이 출력됩니다.

[ 'Amy', 'Dolly', 'Jason' ]