객체 매핑하기
중요도: 5
세 개의 프로퍼티 name
과 surname
, id
를 가진 객체 user
가 담긴 배열이 있습니다.
name
과 surname
을 조합해 fullName
을 만들고, 이를 이용해 두 개의 프로퍼티 id
와 fullName
을 가진 객체를 담은 새로운 배열을 반환해주는 코드를 작성해보세요.
예시:
let john = { name: "John", surname: "Smith", id: 1 };
let pete = { name: "Pete", surname: "Hunt", id: 2 };
let mary = { name: "Mary", surname: "Key", id: 3 };
let users = [ john, pete, mary ];
let usersMapped = /* 여기에 코드를 작성하세요. */
/*
usersMapped = [
{ fullName: "John Smith", id: 1 },
{ fullName: "Pete Hunt", id: 2 },
{ fullName: "Mary Key", id: 3 }
]
*/
alert( usersMapped[0].id ) // 1
alert( usersMapped[0].fullName ) // John Smith
문제를 해결하려면 배열을 새로운 배열로 매핑해야 합니다. 힌트를 하나 드리자면 =>
를 이용하는 것입니다.
let john = { name: "John", surname: "Smith", id: 1 };
let pete = { name: "Pete", surname: "Hunt", id: 2 };
let mary = { name: "Mary", surname: "Key", id: 3 };
let users = [ john, pete, mary ];
let usersMapped = users.map(user => ({
fullName: `${user.name} ${user.surname}`,
id: user.id
}));
/*
usersMapped = [
{ fullName: "John Smith", id: 1 },
{ fullName: "Pete Hunt", id: 2 },
{ fullName: "Mary Key", id: 3 }
]
*/
alert( usersMapped[0].id ); // 1
alert( usersMapped[0].fullName ); // John Smith
화살표 함수 우측에 괄호를 썼다는 점에 주목해주시기 바랍니다.
아래와 같이 괄호 없이 코드를 작성할 수 없습니다.
let usersMapped = users.map(user => {
fullName: `${user.name} ${user.surname}`,
id: user.id
});
앞서 배웠듯이 화살표 함수는 본문이 없는 형태인 value => expr
와 본문이 있는 형태인 value => {...}
두 방법으로 작성할 수 있습니다.
중괄호 {
를 만나면 자바스크립트는 이를 객체의 시작이라 인식하지 않고 함수 본문이 시작되는 것이라 인식합니다. 소괄호를 사용하면 이를 피할 수 있습니다.
let usersMapped = users.map(user => ({
fullName: `${user.name} ${user.surname}`,
id: user.id
}));
이제 코드가 의도한 대로 동작합니다.