문제 소개
문장(단어들의 나열)과 하나의 숫자를 입력받아, 그 숫자로 지정한 길이보다 긴 모든 단어를 배열 형태로 반환하는 JavaScript 함수를 작성해야 합니다.
입력 예시
const str = 'this is an example of a basic sentence';
const num = 4;
출력 예시
const output = [ 'example', 'basic', 'sentence' ];
위 문장에서 길이가 4보다 큰 단어는 'example'(7자), 'basic'(5자), 'sentence'(8자) 세 개뿐이기 때문에 이런 결과가 나옵니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다.
const str = 'this is an example of a basic sentence';
const num = 4;
const findLengthy = (str = '', num = 1) => {
const strArr = str.split(' ');
const res = [];
for(let i = 0; i < strArr.length; i++){
const el = strArr[i];
if(el.length > num){
res.push(el);
};
};
return res;
};
console.log(findLengthy(str, num));
실행 결과
[ 'example', 'basic', 'sentence' ]
코드 동작 원리
이 함수는 다음과 같은 단계로 동작합니다.
split(' ')메서드를 사용해 문장을 공백을 기준으로 나누어 단어 배열을 만듭니다.- 반복문으로 각 단어의 길이를 확인하고, 지정된 숫자보다 긴 단어만 결과 배열에 추가(
push)합니다. - 조건을 만족하는 단어들로 구성된 최종 배열을 반환합니다.
더 간결한 방법: filter() 활용
배열의 filter() 메서드를 사용하면 같은 로직을 훨씬 짧고 가독성 좋게 작성할 수 있습니다.
const findLengthy = (str = '', num = 1) =>
str.split(' ').filter(word => word.length > num);
console.log(findLengthy('this is an example of a basic sentence', 4));
// [ 'example', 'basic', 'sentence' ]
filter()는 조건을 통과하는 요소만 모아 새로운 배열을 만들어 주기 때문에, 반복문과 조건문을 직접 작성하는 것보다 코드가 간결해지고 실수도 줄어듭니다. 실무에서는 이 방식을 권장합니다.