Mapa a objetos
Tienes un array de objetos user
, cada uno tiene name
, surname
e id
.
Escribe el código para crear otro array a partir de este, de objetos con id
y fullName
, donde fullName
es generado a partir de name
y surname
.
Por ejemplo:
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 = /* ... tu código ... */
/*
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
Entonces, en realidad lo que necesitas es mapear un array de objetos a otro. Intenta usar =>
en este caso. Hay un pequeño truco.
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
Ten en cuenta que para las funciones arrow necesitamos usar paréntesis adicionales.
No podemos escribirlo de la siguiente manera:
let usersMapped = users.map(user => {
fullName: `${user.name} ${user.surname}`,
id: user.id
});
Como recordarás, existen dos funciones arrow: sin cuerpo value => expr
y con cuerpo value => {...}
.
Acá JavaScript tratará {
como el inicio de cuerpo de la función, no el inicio del objeto. La manera de resolver esto es encerrarlo dentro de paréntesis:
let usersMapped = users.map(user => ({
fullName: `${user.name} ${user.surname}`,
id: user.id
}));
Ahora funciona.