domingo, 7 de febrero de 2016

Create a nested array recursively in Javascript


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