• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

map함수 작성관

23.05.26 13:16 작성 조회수 357

0

안녕하세요 강의 잘 듣고 있습니다.

 

function map<T,K>(arr:T[],callback:(item:any)=>K){
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]))
}
return result
}

이렇게 map함수를 정의하였는데요

map(['hi','hello'],(it)=>parseInt(it))

이게 가능하면 안되니까

function map<T>(arr:T[],callback:(item:any)=>T){
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]))
}
return result
}

이게 map함수 올바른 작성 양식 아닌가요??

답변 2

·

답변을 작성해보세요.

1

이지수님의 프로필

이지수

질문자

2023.05.26

'동일하게 동작할 수 있어야 하기 때문에' 이 개념이었군요!! 답변 감사합니다!!

0

안녕하세요 이지수님 이정환입니다.

자바스크립트의 Map 메서드는 기존 배열 요소 타입과 다른 타입의 요소들로 이루어진 배열로 변환하는 기능도 제공합니다. 따라서 다음과 같은 동작이 가능해야 합니다.

const arr = [1, 2, 3];
arr.map((it) => it.toString());
// ["1", "2", "3"]

위 코드는 number 타입의 요소들이 담긴 배열을 string 타입의 요소들이 담긴 배열로 변환하는 예 입니다.

따라서 Map 메서드를 우리가 직접 구현할 때에도 위와 동일하게 동작할 수 있어야 하기 때문에
타입 변수를 2개(T, U) 사용해 반환 배열 요소의 타입이 원래 배열 요소의 타입과 달라질 수 있도록 설정해주어야 합니다.