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)
