Я хочу добавить новое свойство (contactDetails.countryName) и назначить значение для вложенного объекта, хранящегося в массиве с именем users, с помощью функции map ().
Недавно я узнал, что должен использовать оператор распространения (...), а затем создать / назначить новое свойство, чтобы избежать изменения моего исходного массива объектов, поэтому я разработал 2 различные реализации дляэто, но я не совсем уверен, что я следую лучшим практикам, которые я хочу достичь относительно семантики и производительности.
Какой, по вашему мнению, наилучший подход для достижения того, что я хочу сделать?
const countries = [
{ id: 3, countryName : "UK" },
{ id: 4, countryName : "Spain" },
{ id: 6, countryName : "Germany"}
];
const users = [
{ id : 1,
name: "Douglas Camp",
dateOfBirth: "23-06-1984",
contactDetails:
{
country: 3,
phone: "7373724997"
}
},
{
id : 2,
name: "Martin Stein",
dateOfBirth: "19-08-1992",
contactDetails:
{
country: 6,
phone: "3334343434"
}
},
];
const usersData = users.map(user=> {
// Version 1 : using spreading operator twice
const newUser = {
...user,
contactDetails: {
...user.contactDetails,
countryName: countries.find(c=> c.id == user.contactDetails.country).countryName
}
};
return newUser;
});
// Version 2: copying the original object property and using spread operator only for cloning the nested object properties
const newUser = {
id: user.id,
name: user.name,
dateOfBirth: user.dateOfBirth,
contactDetails: {
...user.contactDetails,
countryName: countries.find(c=> c.id == user.contactDetails.country).countryName
}
};
console.log(users);
console.log(usersData);