Necesito agregar una ruta a los datos antes del gráfico de trazado. ¿Cómo tomaría un determinado objeto por clave que podría estar profundamente anidado, usando la recursividad? Lo he intentado, pero esto no funcionará para anidar a más de n niveles:
Aquí están los datos:
[ { "name": "a", "description": "", "categories": [ { "name": "aa", "description": "", "categories": [ { "name": "aaa", "description": "", "categories": [ { "name": "aaaa", "description": "", "categories": [ ], "count": 55 } ], "count": 20 } ], "count": 25 } ], "count": 50 } ]Resultado Esperado:
[ { "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 } ]Aquí hay una forma rápida, modifica la matriz original.
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); 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)