Home > Software design >  add path nested array of object
add path nested array of object

Time:01-27

I need to add path to the data before plot chart. How would I grab a certain object by key that might be deeply nested, using recursion? I have tried, but this won't work for nesting deeper than n levels:

just for fix It looks like your post is mostly code; please add some more details. Here is the data:

[
    {
    "name": "a",
    "description": "",
    "categories": [
        {
        "name": "aa",
        "description": "",
        "categories": [
            {
            "name": "aaa",
            "description": "",
            "categories": [
                {
                "name": "aaaa",
                "description": "",
                "categories": [
                ],
                "count": 55
                }
            ],
            "count": 20
            }
        ],
        "count": 25
        }
    ],
    "count": 50
    }
]

expected result:

    [
    {
    "name": "a",
    "description": "",
    "path": "a",
    "categories": [
        {
        "name": "aa",
        "description": "",
        "path": "a/aa",
        "categories": [
            {
            "name": "aaa",
            "description": "",
            "path": "a/aa/aaa",
            "categories": [
                {
                "name": "aaaa",
                "description": "",
                "path": "a/aa/aaa/aaaa",
                "categories": [
                ],
                "count": 55
                }
            ],
            "count": 20
            }
        ],
        "count": 25
        }
    ],
    "count": 50
    }
]

CodePudding user response:

Here's a quick way, it modifies the original array.

const data = [
    {
    "name": "a",
    "description": "",
    "categories": [
        {
        "name": "aa",
        "description": "",
        "categories": [
            {
            "name": "aaa",
            "description": "",
            "categories": [
                {
                "name": "aaaa",
                "description": "",
                "categories": [
                ],
                "count": 55
                }
            ],
            "count": 20
            }
        ],
        "count": 25
        }
    ],
    "count": 50
    }
];

const updatePaths = (arr, path = "") => {
  arr.forEach(el => {
    el.path = path   el.name;
    updatePaths(el.categories, el.path   "/");
  });
};

updatePaths(data);
console.log(data);

CodePudding user response:

let data = [{
  "name": "a",
  "description": "",
  "categories": [{
    "name": "aa",
    "description": "",
    "categories": [{
      "name": "aaa",
      "description": "",
      "categories": [{
        "name": "aaaa",
        "description": "",
        "categories": [],
        "count": 55
      }],
      "count": 20
    }],
    "count": 25
  }],
  "count": 50
}]

const tagWithPath = ([first, ...rest], currentPath = '') => {
  if (!first) return;
  const newPath = currentPath   '/'   first.name
  first.path = newPath
  tagWithPath(first.categories, newPath)
  tagWithPath(rest, newPath)

}

tagWithPath(data)

console.log(data)

  •  Tags:  
  • Related