Мне нужно добавить идентификаторы в массив объектов: Пример:
const workouts = [
{
type: "walk"
areas: [
{
location: 'park'
day: 'Sunday'
},
{
location: 'beach'
day: 'Monday'
}
],
exercise: true
},
{
type: "run"
areas: [
{
location: 'gym'
day: 'Saturday'
},
{
location: 'track'
day: 'Sunday'
}
],
exercise: true
}
]
В этом примере мне нужно добавить идентификаторы в массив workouts
и глубоко вложенный массив areas
. Я пришел к этому решению, отображающему все массивы:
const idMappings = workouts.map((workout) => {
const workoutIdMapping = workout.id ? workout : { ...workout, id: uuid.v4() }; // if there is already an id just return the object -- otherwise generate a random id
const areasIdMapping = workoutIdMapping.areas.map((area) => {
return area.id ? area : { ...area, id: uuid.v4() }; // if there is already an id just return the object -- otherwise generate a random id
});
return { ...workoutIdMapping, areas: areasIdMapping }; // finally return the updated values with ids
});
Это правильно возвращает мне следующую область с идентификаторами:
const workouts = [
{
id: "0000-0000-4e6b-9f24-f8e1f2402a9b"
type: "walk"
areas: [
{
id: "0000-1111-4e6b-9f24-f8e1f2402a9b"
location: 'park'
day: 'Sunday'
},
{
id: "0000-2222-4e6b-9f24-f8e1f2402a9b"
location: 'beach'
day: 'Monday'
}
],
exercise: true
},
{
id: "1111-0000-4e6b-9f24-f8e1f2402a9b"
type: "run"
areas: [
{
id: "1111-1111-4e6b-9f24-f8e1f2402a9b"
location: 'gym'
day: 'Saturday'
},
{
id: "1111-2222-4e6b-9f24-f8e1f2402a9b"
location: 'track'
day: 'Sunday'
}
],
exercise: true
}
]
Этот алгоритм работал правильно, но есть ли более эффективный способ решения этой проблемы - Является ли многократное сопоставление не эффективным способом решения этой проблемы - возможно, есть более эффективные функции ES6, которые я могу использовать?