문자열 배열을 입력받아 그중 가장 길이가 짧은 문자열을 찾아 반환하는 JavaScript 함수를 작성해야 합니다.
접근 방법
가장 기본적인 방법은 for 루프를 사용해 배열을 순회하면서 가장 짧은 문자열의 인덱스를 계속 저장하는 것입니다. 하지만 이번 예제에서는 코드를 더 간결하게 만들어 주는 reduce() 메서드를 활용해 보겠습니다.
reduce()를 사용하면 배열을 순회하면서 누적값(acc)에 현재까지 발견된 가장 짧은 문자열의 인덱스(ind)와 길이(len)를 함께 유지할 수 있습니다. 초기값으로 인덱스는 -1, 길이는 Infinity를 설정하여 어떤 문자열과도 비교 가능하도록 합니다.
예제 코드
const arr = ['this', 'can', 'be', 'some', 'random', 'sentence'];
const findSmallest = arr => {
const creds = arr.reduce((acc, val, index) => {
let { ind, len } = acc;
if (val.length < len) {
len = val.length;
ind = index;
}
return { ind, len };
}, {
ind: -1,
len: Infinity
});
return arr[creds['ind']];
};
console.log(findSmallest(arr));코드 설명
- 초기값:
{ ind: -1, len: Infinity }— 아직 아무것도 찾지 않은 상태를 나타냅니다. - 비교 로직: 현재 문자열의 길이(
val.length)가 저장된 최소 길이(len)보다 작으면, 해당 문자열의 길이와 인덱스로 값을 갱신합니다. - 반환값: reduce가 끝난 후
creds.ind에 저장된 인덱스를 사용해 원본 배열에서 가장 짧은 문자열을 꺼내 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.
be
배열의 모든 요소 중 'be'의 길이가 2로 가장 짧기 때문에 정상적으로 출력되는 것을 확인할 수 있습니다.