- 30_findShortestWord 문제를 직접 풀고, 자신이 푼 코드와 레퍼런스 코드를 비교하여 line by line으로 설명해 주세요
- Urclass 고차함수에서 배웠던 배열의 내장 매소드를 사용하여야 합니다.
- 사용한 매소드의 작동 방식에 대해서 구체적으로 설명해야 합니다.
배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴해야 합니다.
function findShortestWord(arr) {
let filterArr = arr.filter(function(el) {
if (typeof el === 'string') {
// 타입이 스트링인 것들만 필터링
return true;
}
});
if (filterArr.length === 0) {
// 빈 배열일 경우 빈 문자열을 리턴
return '';
}
let shortLength = filterArr.reduce(function(acc, cur) {
if (acc.length > cur.length) {
// 누적값의 길이가 현재 값보다 클 경우
acc = cur;
// 누적값에 현재 값을 할당해준다.
}
return acc;
// 누적값을 리턴
}, filterArr[0])
// 초기값 설정
return shortLength
// 가장 짧은 길이를 가진 문자열 요소 리턴
}
function findShortestWord(arr) {
const onlyStrings = arr.filter(function (el) {
return typeof el === 'string';
});
// 배열의 각 요소가 특정 논리(함수)에 따르면, 사실(boolean)일 때 따로 분류한다(filter).
// 빈 배열 안에 타입 요소가 문자열일 경우만 담아준다.
if (onlyStrings.length === 0) {
return '';
}
// 빈 배열을 받을 경우 빈 문자열을 리턴한다.
return onlyStrings.reduce(function (acc, cur) {
// 배열 각 요소를 함수에 따라 원하는 하나의 형태로 응축하는 reduce 메소드를 사용 (현재 각 요소들이 문자열인 배열)
if (acc.length <= cur.length) {
// 누적 값의 길이와 현재 값의 길이를 비교
// 누적 값이 현재 값보다 길이가 짧으면 누적 값에 넣는다.
return acc;
} else {
// 누적값이 길 때 현재 값을 리턴
return cur;
}
});
}