이번 글에서는 문자열을 하나의 인수로 받아, 그 안에서 가장 긴 단어를 찾아 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다. 함수는 문자열을 순회하면서 각 단어의 길이를 비교하고, 가장 길이가 긴 단어를 결과로 돌려주어야 합니다.
문제 이해하기
예를 들어 입력 문자열이 다음과 같다고 가정해 보겠습니다.
const str = 'Coding in JavaScript is really fun';
이 경우 함수는 각 단어(Coding, in, JavaScript, is, really, fun)의 길이를 비교한 뒤, 가장 긴 단어인 'JavaScript'(10자)를 반환해야 합니다.
const output = 'JavaScript';
해결 접근 방식
가장 깔끔한 해결 방법은 다음 두 단계로 나눌 수 있습니다.
1. split(' ') 메서드를 사용해 공백을 기준으로 문자열을 단어 배열로 분리합니다.
2. reduce() 메서드를 사용해 배열을 순회하면서 지금까지 발견한 가장 긴 단어를 누적값(acc)으로 유지합니다.
코드 구현
위 접근 방식을 적용한 전체 코드는 다음과 같습니다.
const str = 'Coding in JavaScript is really fun';
const findLongest = (str = '') => {
const strArr = str.split(' ');
const word = strArr.reduce((acc, val) => {
let { length: len } = acc;
if(val.length > len){
acc = val;
};
return acc;
}, '');
return word;
};
console.log(findLongest(str));코드 동작 원리
findLongest 함수는 먼저 split(' ')으로 문자열을 단어 배열로 만듭니다. 이후 reduce()의 초기값을 빈 문자열('')로 설정하고, 각 단어(val)를 현재 누적값(acc)과 비교합니다. 만약 현재 단어가 누적값보다 길다면 누적값을 해당 단어로 교체합니다. 모든 단어를 순회한 뒤 최종 누적값, 즉 가장 긴 단어가 반환됩니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
JavaScript
마무리
이처럼 split()과 reduce()를 조합하면 반복문 없이도 선언적으로 가장 긴 단어를 손쉽게 찾을 수 있습니다. 참고로 같은 길이의 단어가 여러 개일 경우 이 코드는 먼저 등장하는 단어를 반환한다는 점도 기억해 두면 좋습니다.