21.02.25 TIL - Filter & Reduce

J·2021년 2월 26일
0

findShortestWords

먼저 문제를 보겠다.

  1. 배열을 입력받아 배열에서 가장 짧은 길이의 문자열 요소를 return해야 한다.
  2. 같은 길이의 요소가 있다면 배열의 앞쪽에 있는 요소를 return한다.
  3. 배열에는 문자열 외 다른 요소가 있을 수 있다.
  4. 빈 배열 혹은 주어진 배열에 문자열이 없을 경우 빈 문자열을 return한다.

두 번째 주의사항인 if 같은 길이의 배열 시, 먼저 나온 요소 return
그리고 문자열 외 다른 요소가 있을 수 있는 점 등을 고려해야 한다.

function findShortestWord(arr) { // 임의의 요소를 갖는 배열을 인자로 설정
  const result = arr.filter(function(a) { 
    return typeof a === 'string' // 먼저 arr 배열의 요소 a의 타입이 문자열인 경우만을 filtering 한다. -> 문자열이 없는 경우를 배제
  })
  if (result.length === 0) { // 이후 filtering된 새로운 배열(result)의 길이가 0이라면(빈 배열이라면)
    return ''; // 빈 문자열을 return한다.
  }
   return result.reduce(function(a, b) { // 그 경우들이 아니라면 이제 reduce 메소드를 작성한다.
    if (a.length <= b.length) { // a 인자가 다음 인자인 b 의 길이보다 작거나 같다면 -> 두 번째 주의사항인 같은 길이의 요소일 경우 앞쪽 요소 return 을 제시하는 조건이다.
      return a; // 먼저 나온 요소인 a를 return하고
    } else {
      return b; // 그것이 아니라면(b가 더 길다면) b를 return한다.
    }
  });
}

정리

  1. 주의사항에 따라 먼저 여러 type이 있는 배열을 filter메소드를 통해 문자열만 있는 배열로 바꾼다.
  2. 이후 빈 배열 입력받을 경우 빈 문자열 return을 먼저 조건으로 잡아주고,
  3. 요소 간 비교를 위해 reduce메소드로 세부 비교를 수행하고 출력한다.

0개의 댓글