Create a nested array recursively in Javascript
Let’s say you have an array like this:
[
{id: 1, title: 'hello', parent: 0},
{id: 2, title: 'hello', parent: 0},
{id: 3, title: 'hello', parent: 1},
{id: 4, title: 'hello', parent: 3},
{id: 5, title: 'hello', parent: 4},
{id: 6, title: 'hello', parent: 4},
{id: 7, title: 'hello', parent: 3},
{id: 8, title: 'hello', parent: 2}
]
And you want to have the objects nested like this:
[
{id: 1, title: 'hello', parent: 0, children: [
{id: 3, title: 'hello', parent: 1, children: [
{id: 4, title: 'hello', parent: 3, children: [
{id: 5, title: 'hello', parent: 4},
{id: 6, title: 'hello', parent: 4}
]},
{id: 7, title: 'hello', parent: 3}
]}
]},
{id: 2, title: 'hello', parent: 0, children: [
{id: 8, title: 'hello', parent: 2}
]}
]
Here’s a recursive function that makes it happen.
function getNestedChildren(arr, parent) {
var out = []
for(var i in arr) {
if(arr[i].parent == parent) {
var children = getNestedChildren(arr, arr[i].id)
if(children.length) {
arr[i].children = children
}
out.push(arr[i])
}
}
return out
}
Example
function buildTree(arr, parent) {
var out = []
for(var i in arr) {
if(arr[i].control_padre_id === parent) {
var children = buildTree(arr, arr[i].id)
if(children.length) {
arr[i].children = children
}
arr[i].is_active = Boolean(arr[i].is_active) ;
out.push(arr[i])
}
}
return out
} ;
var menu = buildTree(data, null) ;
console.log(menu) ;
JSON : -> var data = [{"id":1,"control_padre_id":null,"jerarquia":"10","nombre":"Gesti\u00f3n de Informaci\u00f3n","valor":"","descripcion":"Gesti\u00f3n de Informaci\u00f3n","tipo_control_id":1,"glosa":"","is_active":"true"},{"id":2,"control_padre_id":1,"jerarquia":"1001","nombre":"Maestros","valor":"maestros","descripcion":"menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":21,"control_padre_id":20,"jerarquia":"1001","nombre":"Maestros","valor":"maestros1","descripcion":"menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":3,"control_padre_id":2,"jerarquia":"100101","nombre":"Personas","valor":"maestros.personas","descripcion":"sub menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":22,"control_padre_id":21,"jerarquia":"100101","nombre":"Personas","valor":"maestros.personas1","descripcion":"sub menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":4,"control_padre_id":3,"jerarquia":"10010101","nombre":"Listar","valor":"list","descripcion":"fa-list","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":23,"control_padre_id":22,"jerarquia":"10010101","nombre":"Listar","valor":"list","descripcion":"fa-list","tipo_control_id":3,"glosa":"","is_active":"false"},{"id":5,"control_padre_id":3,"jerarquia":"10010102","nombre":"Nuevo","valor":"new","descripcion":"fa-plus","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":24,"control_padre_id":22,"jerarquia":"10010102","nombre":"Nuevo","valor":"new","descripcion":"fa-plus","tipo_control_id":3,"glosa":"","is_active":"false"},{"id":6,"control_padre_id":3,"jerarquia":"10010103","nombre":"Editar","valor":"edit","descripcion":"fa-pencil-square-o","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":25,"control_padre_id":22,"jerarquia":"10010103","nombre":"Editar","valor":"edit","descripcion":"fa-pencil-square-o","tipo_control_id":3,"glosa":"","is_active":"false"},{"id":8,"control_padre_id":1,"jerarquia":"1002","nombre":"Accesos","valor":"accesos","descripcion":"menu","tipo_control_id":2,"glosa":"","is_active":"false"},{"id":9,"control_padre_id":8,"jerarquia":"100201","nombre":"Roles","valor":"accesos.roles","descripcion":"sub menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":10,"control_padre_id":9,"jerarquia":"10020101","nombre":"Listar","valor":"list","descripcion":"fa-list","tipo_control_id":3,"glosa":"inbarra","is_active":"true"},{"id":11,"control_padre_id":9,"jerarquia":"10020102","nombre":"Nuevo","valor":"new","descripcion":"fa-plus","tipo_control_id":3,"glosa":"inbarra","is_active":"true"},{"id":12,"control_padre_id":9,"jerarquia":"10020103","nombre":"Editar","valor":"edit","descripcion":"fa-pencil-square-o","tipo_control_id":3,"glosa":"intable","is_active":"true"},{"id":13,"control_padre_id":9,"jerarquia":"10020104","nombre":"Eliminar","valor":"delete","descripcion":"fa-trash-o","tipo_control_id":3,"glosa":"intable","is_active":"true"},{"id":14,"control_padre_id":8,"jerarquia":"100202","nombre":"Usuarios","valor":"accesos.usuarios","descripcion":"sub menu","tipo_control_id":2,"glosa":"","is_active":"true"},{"id":15,"control_padre_id":14,"jerarquia":"10020201","nombre":"Listar","valor":"list","descripcion":"fa-list","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":16,"control_padre_id":14,"jerarquia":"10020202","nombre":"Nuevo","valor":"new","descripcion":"fa-plus","tipo_control_id":3,"glosa":"","is_active":"false"},{"id":17,"control_padre_id":14,"jerarquia":"10020203","nombre":"Editar","valor":"edit","descripcion":"fa-pencil-square-o","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":18,"control_padre_id":14,"jerarquia":"10020204","nombre":"Eliminar","valor":"delete","descripcion":"fa-trash-o","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":19,"control_padre_id":14,"jerarquia":"10020205","nombre":"accesos","valor":"access","descripcion":"fa-check-square-o","tipo_control_id":3,"glosa":"","is_active":"true"},{"id":20,"control_padre_id":null,"jerarquia":"20","nombre":"Reportes","valor":"","descripcion":"Gesti\u00f3n de Informaci\u00f3n","tipo_control_id":1,"glosa":"","is_active":"true"}] ;
No hay comentarios.:
Publicar un comentario