인프런 커뮤니티 질문&답변

재열님의 프로필 이미지
재열

작성한 질문수

함수형 프로그래밍과 JavaScript ES6+

L.flatMap, flatMap

다용성이 높은 L.flatMap

작성

·

249

0

안녕하세요! 정말 좋은 강의를 남겨주셔서 감사합니다!

현재 강의에서 소개해주신 L.flatMap은 제가 생각하기에 L.map을 바탕으로 돌아가기 때문에
주어진 배열에 이터러블이 아닌 값이 들어가있으면 사용할 수 없어서 다용성을 높이고자 L.map에서 여러가지 삽질들을 해보면서 다용성을 높이려고 했지만 제 결과물들은 살짝아쉽더라구요!! 혹시

const it = [[1, 2], 3, 4, [5, 6, 7]] 이러한 배열에서도 사용할 수 있는 다용성 높은 L.flatMap을 어떤식으로 구현해야할지 궁금하여 질문드립니다!!

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

L.flatMap은 주어진 이터러블에서 각 요소에 대해 콜백 함수를 실행하고, 각 반환 값을 평탄화(flatten)하여 새로운 배열을 생성하는 메소드입니다.

여러 다양한 형태의 이터러블을 다룰 수 있는 다용성을 갖춘 L.flatMap을 구현하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.

  1. 주어진 이터러블을 순회하면서 각 요소에 대해 검사합니다.
  2. 만약 요소가 배열이 아니라면, 해당 요소를 단일 요소로 갖는 배열로 변환합니다.
  3. 배열인 경우, 해당 요소에 대해 L.map을 사용하여 콜백 함수를 실행하고 새로운 배열을 반환합니다.
  4. 이렇게 반환된 배열을 단일 배열로 평탄화시킵니다.
  5. 최종적으로 생성된 배열을 반환합니다.

즉, 다음과 같이 구현할 수 있습니다.

function L.flatMap(iterable, mapper) {
  const result = [];
  
  for (const item of iterable) {
    if (Array.isArray(item)) {
      result.push(...mapper(item));
    } else {
      result.push(mapper([item]));
    }
  }
  
  return result;
}

위의 코드에서 iterable은 주어진 배열 it이고, mapper는 각 요소에 대해 실행할 콜백 함수입니다. 이를 참고하여 코드를 적절하게 수정하시면, 다양한 형태의 이터러블에 대해 사용할 수 있는 L.flatMap을 구현하실 수 있을 것입니다.

더 자세한 내용은 인프런 강의 내용을 참고해주세요.
진행하시는 프로젝트나 코드에 맞게 필요한 부분들을 추가하시면 다용성을 높일 수 있을 거예요. 원하시는 답변이 아니거나 추가적인 질문이 있으시면 언제든지 물어보세요.

앞으로의 학습 과정에서도 좋은 성과 있으시길 바랄게요. 좋은 하루 되세요!

재열님의 프로필 이미지
재열

작성한 질문수

질문하기