21.02.25 TIL - Filter & Reduce

J·2021년 2월 26일

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개의 댓글