TIL_210224

멜로디·2021년 2월 24일
0

Today I Learned

목록 보기
3/30
post-thumbnail

오늘 배운 것

  • 기수 이동 과제 : 배열의 내장 메소드 사용법
  • 코플릿 다시 풀기 : 문자열

기수 이동 과제

배열의 내장 메소드 사용법

문제

배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴하라

입력 : 임의의 요소가 담긴 배열
출력 : string 타입을 리턴해야 합니다
주의사항

  • 반복문 사용 금지
  • 같은 길이의 요소가 있다면 배열의 앞쪽에 있는 요소를 리턴
  • 배열에는 문자열 외에 다른 요소들이 있을 수 있다
  • 빈 배열을 입력받은 경우 ,빈 문자열을 리턴
  • 주어진 배열에 문자열이 없는 경우, 빈 문자열을 리턴

오답

function findShortestWord(arr) {

const findstring = function (el) {
  if(typeof(el) === 'string'){
    return el;
  }
}
const strArr = arr.map(findstring)

if(arr.length === 0) {
  return '';
}

return strArr.reduce(function (acc, cur){
  if(acc.length <= cur.length) {
    return acc;
  } else {
    return cur;
  }
})

}

무엇이 잘못되었는가

  1. 중간에 map을 사용하여 문자열만 존재하는 배열을 만들려고 했는데, 계속 오류가 나길래 디버거를 돌려보았더니 string이 아닌 요소는 무시하고 넘어가는 것이 아니라 undefined가 되어 리턴되고 있었다.

  2. arr.length === 0을 조건으로 하다 보니 빈 배열만 걸러내고 찾는 문자열이 없는 배열은 배열 그대로를 리턴하고 있었다.

해결 방법

  1. map은 메소드가 리턴받지 못하면 undefined를 배열의 요소로 추가한다. map이 아닌 filter를 이용해서 입력 배열을 필터링할 것
  2. 빈 배열이든 찾는 것이 없는 배열이든 filter를 거치면 길이가 0이 된다. arr.length가 아니라 strArr.length을 비교하면 4번째와 5번째 조건을 동시에 충족할 수 있다.
profile
하루하루 배울때마다 기록하는 일기장

0개의 댓글