redditor
redditor

Reputation: 4286

Iterate through all children and children children of an object

I have an object with children objects, and even great grandchildren objects.

I am currently using

for (const [key, value] of Object.entries(myObj)) {
  console.log(`${key}: ${value}`);
}

Which produces, for example:

How do I iterate through any number of child objects to return something similar to

The "1 of 2" isn't needed, but demonstrates my output goal.

Upvotes: 3

Views: 2587

Answers (1)

T.J. Crowder
T.J. Crowder

Reputation: 1075289

This is a situation where recursion is useful. For example:

function visitDescendants(obj, callback) {
    for (const [key, value] of Object.entries(obj)) {
        if (value && typeof value === "object") {
            // Recurse
            visitDescendants(value, callback);
        } else {
            callback(key, value);
        }
    }    
}

Live example:

function visitDescendants(obj, callback) {
    for (const [key, value] of Object.entries(obj)) {
        if (value && typeof value === "object") {
            // Recurse
            visitDescendants(value, callback);
        } else {
            callback(key, value);
        }
    }    
}

const obj = {
    a: 1,
    message: "hi",
    b: {
        nestedMessage: "there",
        c: {
            furtherNestedMessage: "folks!"
        },
    },
};

visitDescendants(obj, (key, value) => {
    console.log(`${key}: ${value}`);
});

Upvotes: 6

Related Questions