Map di oggetti
Avete un array di oggetti user
, ognuno di questi possiede name
, surname
e id
.
Scrivete il codice per creare un altro array che derivi da questo, sempre composto da oggetti con id
e fullName
, dove fullName
viene generato da name
e surname
.
Un esempio:
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 = /* ... il vostro codice ... */
/*
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
Quindi, in realtà avrete bisogno di mappare un array di oggetti in un altro. Provate ad utilizzare =>
.
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
Da notare che nell’arrow function abbiamo bisogno di utilizzare un’ulteriore parentesi.
Non possiamo scrivere semplicemente:
let usersMapped = users.map(user => {
fullName: `${user.name} ${user.surname}`,
id: user.id
});
Se ricordate, ci sono due tipi di arrow function: senza corpo value => expr
e con il corpo value => {...}
.
Qui JavaScript tratterà {
come l’inzio del corpo della funzione, non l’inizio dell’oggetto. Questo trucco viene utilizzato per racchiuderle nelle normali parentesi:
let usersMapped = users.map(user => ({
fullName: `${user.name} ${user.surname}`,
id: user.id
}));
Ora funziona.