Let's say there is an object that looks like this:
Data object
const movies = {
action: {
actionMovie1: {
title: "Action Movie 1", // <-- Move to the separate object
rating: 5,
},
actionMovie2: {
title: "Action Movie 2", // <-- Move to the separate object
rating: 5,
},
actionMovie3: {
title: "Action Movie 3", // <-- Move to the separate object
rating: 5,
},
},
adventure: {
adventureMovie1: {
title: "Adventure Movie 1", // <-- Move to the separate object
rating: 5,
},
adventureMovie2: {
title: "Adventure Movie 2", // <-- Move to the separate object
rating: 5,
},
adventureMovie3: {
title: "Adventure Movie 3", // <-- Move to the separate object
rating: 5,
},
},
animated: {
new: {
newAnimatedMovie1: {
title: "New Animated Movie 1", // <-- Move to the separate object
rating: 5,
},
newAnimatedMovie2: {
title: "New Animated Movie 2", // <-- Move to the separate object
rating: 5,
},
},
reviewed: {
reviewedAnimatedMovie1: {
title: "Reviewed Animated Movie 1", // <-- Move to the separate object
rating: 5,
},
reviewedAnimatedMovie2: {
title: "Reviewed Animated Movie 2", // <-- Move to the separate object
rating: 5,
},
},
},
};
Now I'm trying to iterate a data object, collect all the movie titles and put them in a separate object so that the final result looks something like this:
Expected result
const movieTitles = {
actionMovie1: "Action Movie 1",
actionMovie2: "Action Movie 2",
actionMovie3: "Action Movie 3",
adventureMovie1: "Adventure Movie 1",
adventureMovie2: "Adventure Movie 2",
adventureMovie3: "Adventure Movie 3",
newAnimatedMovie1: "New Animated Movie 1",
newAnimatedMovie2: "New Animated Movie 2",
reviewedAnimatedMovie1: "Reviewed Animated Movie 1",
reviewedAnimatedMovie2: "Reviewed Animated Movie 2",
};
So far, the closest result I could get was with this method, but it only works for the first two keys.
Current attempt
const movieTitles = Object.fromEntries(
Object.values(movies).flatMap((movie) =>
Object.entries(movie).map(([key, value]) => [key, value.title])
)
);
Could you please help complete this function, given the fact that more data may be added in the future. For example, later the data object might look like this:
Updated data object
const movies = {
action: {
actionMovie1: {
title: "Action Movie 1",
rating: 5,
},
actionMovie2: {
title: "Action Movie 2",
rating: 5,
},
actionMovie3: {
title: "Action Movie 3",
rating: 5,
},
actionMovie4: { // <-- New, follows the same structure
title: "Action Movie 4",
rating: 5,
},
},
adventure: {
adventureMovie1: {
title: "Adventure Movie 1",
rating: 5,
},
adventureMovie2: {
title: "Adventure Movie 2",
rating: 5,
},
adventureMovie3: {
title: "Adventure Movie 3",
rating: 5,
},
adventureMovie4: { // <-- New, follows the same structure
title: "Adventure Movie 4",
rating: 5,
},
},
animated: {
new: {
newAnimatedMovie1: {
title: "New Animated Movie 1",
rating: 5,
},
newAnimatedMovie2: {
title: "New Animated Movie 2",
rating: 5,
},
newAnimatedMovie3: { // <-- New, follows the same structure
title: "New Animated Movie 3",
rating: 5,
},
},
reviewed: {
reviewedAnimatedMovie1: {
title: "Reviewed Animated Movie 1",
rating: 5,
},
reviewedAnimatedMovie2: {
title: "Reviewed Animated Movie 2",
rating: 5,
},
reviewedAnimatedMovie3: { // <-- New, follows the same structure
title: "Reviewed Animated Movie 3",
rating: 5,
},
},
translated: { // <-- New category, follows the same structure
translatedAnimatedMovie1: { // <-- New, follows the same structure
title: "Translated Animated Movie 1",
rating: 5,
},
},
},
};
New expected result
const movieTitles = {
actionMovie1: "Action Movie 1",
actionMovie2: "Action Movie 2",
actionMovie3: "Action Movie 3",
actionMovie4: "Action Movie 4",
adventureMovie1: "Adventure Movie 1",
adventureMovie2: "Adventure Movie 2",
adventureMovie3: "Adventure Movie 3",
adventureMovie4: "Adventure Movie 4",
newAnimatedMovie1: "New Animated Movie 1",
newAnimatedMovie2: "New Animated Movie 2",
newAnimatedMovie3: "New Animated Movie 3",
reviewedAnimatedMovie1: "Reviewed Animated Movie 1",
reviewedAnimatedMovie2: "Reviewed Animated Movie 2",
reviewedAnimatedMovie3: "Reviewed Animated Movie 3",
translatedAnimatedMovie1: "Translated Animated Movie 1",
};