j.doe:
Tengo estructura, como a continuación:
{
0: [{
"id": "1",
"parentId": "root",
"path": "root"
"children": [{
"id": "2",
"parentId": "1",
"path": "1/2",
"children": [
"id": "4",
"parentId": "2",
"path": "2/4"
]
}, {
"id": "3",
"parentId": "1",
"path": "1/3"
}]
}]
}
Tengo clave "path"
y ahora es "parentId/id"
, pero me gustaría tener camino de la raíz a este elemento, por lo que debe miradas "root/parentId/id/parentId/it..."
etc. Por ejemplo ruta: "root/1/2/4"
.
¿Cómo puedo poner dinámicamente una llave dentro valor "path"
para obtener la ruta completa al elemento raíz?
Guerrico P:
Su estructura de datos no respeta la infancia de cada elemento, pero teniendo en cuenta que esto no es una parte de la pregunta, aquí hay una solución recursiva simple:
const data = [{
"id": "1",
"parentId": "root",
"path": "root",
"children": [{
"id": "2",
"parentId": "1",
"path": "1/2",
"children": [{
"id": "4",
"parentId": "2",
"path": "2/4"
}
]
}, {
"id": "3",
"parentId": "1",
"path": "1/3"
}
]
},
{
"id": "4",
"parentId": "2",
"path": "2/4"
}
];
function assignPath(tree, index, array, currentPath) {
tree.path = currentPath || 'root';
tree.children && tree.children.forEach(child => {
assignPath(child, null, null, `${tree.path}/${child.id}`);
});
}
data.forEach(assignPath);
console.log(data);