Zagreus
Zagreus

Reputation: 207

Recursively change array results

I am using an API which is returning results in a format that includes extra nodes. I want to recursively run through the results to remove the "data" nodes so that I can use it in my application.

Can I do this with plain javascript or Lodash?

This is the results that I am getting:

"pages": {
    "data": [
        {
            "id": 32,
            "pages": {
                "data": [
                    {
                        "id": 33,
                        "pages": {
                            "data": []
                        }
                    },
                    {
                        "id": 34,
                        "pages": {
                            "data": [
                                {
                                    "id": 35,
                                    "pages": {
                                        "data": []
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        },
        {
            "id": 36,
            "pages": {
                "data": []
            }
        }
    ]

This is what I would like to have returned:

"pages": [
        {
            "id": 32,
            "pages": [
                {
                    "id": 33,
                    "pages":  []
                },
                {
                    "id": 34,
                    "pages": [
                        {
                            "id": 35,
                            "pages": []
                        }
                    ]
                }
            ]
        },
        {
            "id": 36,
            "pages": []
        }
    ]

Upvotes: 4

Views: 64

Answers (1)

Nina Scholz
Nina Scholz

Reputation: 386654

You could take a check and a recursive approach for nested arrays.

function clean(object) {
    if (object.pages && object.pages.data) {
        object.pages = object.pages.data;
        delete object.pages.data;
    }
    object.pages.forEach(clean);
}


var object = { pages: { data: [{ id: 32, pages: { data: [{ id: 33, pages: { data: [] } }, { id: 34, pages: { data: [{ id: 35, pages: { data: [] } }] } }] } }, { id: 36, pages: { data: [] } }] } };

clean(object);

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Upvotes: 2

Related Questions