Foros del Web » Programando para Internet » Javascript »

Como tener el control de los indices de un objeto, de forma recursiva.

Estas en el tema de Como tener el control de los indices de un objeto, de forma recursiva. en el foro de Javascript en Foros del Web. Hacer una función recursiva que recorra todo el árbol es sencillo, incluso modificar valores para cada elemento, pero el problema esta cuando quiero borrar un ...
  #1 (permalink)  
Antiguo 24/08/2013, 03:25
Avatar de romel_inc  
Fecha de Ingreso: diciembre-2007
Ubicación: Venezuela-monagas
Mensajes: 288
Antigüedad: 16 años, 4 meses
Puntos: 14
Como tener el control de los indices de un objeto, de forma recursiva.

Hacer una función recursiva que recorra todo el árbol es sencillo, incluso modificar valores para cada elemento, pero el problema esta cuando quiero borrar un nodo en especifico que puede esta en cualquier nivel de anidación. No se como hacerlo, para un objeto anidado por que tengo que tener control de los indices y no veo como tener el control de ellos:

delete tree[0].children[0]
delete tree[1].children[0].children[0]




Mi intención con la función mas abajo es poder hacer lo siguiente:

Cuando, el nodo a borrar tiene hijos, las opciones disponibles son:

1 - nodo se borra y hijos se mantienen, los hijos son heredados por el padre del nodo a borrar, si el nodo a borrar no tiene padre, los hijos pasan a ser nodos principales respetando el order. splice() es una función clave.
2 - nodo y hijos se borran

Cuando el nodo a borrar no tiene hijos, las opciones disponibles son:
1 - nodo se borra




Código:
var tree = [
    {
        "name":"evga",
        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAgw",
        "parent_id":"",
        "left":1,
        "right":6,
        "is_open":true,
        "children":[
            {
                "name":"laptoos",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAQw",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAgw",
                "left":2,
                "right":5,
                "is_open":true,
                "children":[
                    {
                        "name":"os",
                        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAww",
                        "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAQw",
                        "left":3,
                        "right":4
                    }
                ]
            }
        ]
    },
    {
        "name":"6",
        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCAw",
        "parent_id":"",
        "left":7,
        "right":14,
        "is_open":true,
        "children":[
            {
                "name":"5",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBww",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCAw",
                "left":8,
                "right":13,
                "is_open":true,
                "children":[
                    {
                        "name":"4",
                        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBgw",
                        "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBww",
                        "left":9,
                        "right":12,
                        "is_open":true,
                        "children":[
                            {
                                "name":"7",
                                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCQw",
                                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBgw",
                                "left":10,
                                "right":11
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "name":"9",
        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCww",
        "parent_id":"",
        "left":15,
        "right":18,
        "is_open":true,
        "children":[
            {
                "name":"2",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBAw",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCww",
                "left":16,
                "right":17
            }
        ]
    },
    {
        "name":"3",
        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBQw",
        "parent_id":"",
        "left":19,
        "right":24,
        "is_open":true,
        "children":[
            {
                "name":"8",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYCgw",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBQw",
                "left":20,
                "right":21
            },
            {
                "name":"200",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYDAw",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYBQw",
                "left":22,
                "right":23
            }
        ]
    },
    {
        "name":"6",
        "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYDQw",
        "parent_id":"",
        "left":25,
        "right":28,
        "is_open":true,
        "children":[
            {
                "name":"7",
                "id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYDgw",
                "parent_id":"ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYDQw",
                "left":26,
                "right":27
            }
        ]
    }
];


var test = function(obj){

    $(obj).each(function(index,node){



        if(node.id == "ag1zYW50b21lcmNhZG9zch4LEgRUcmVlIgR0cmVlDAsSClRyZWVCcmFuY2gYAQw"){
            console.log("Nodo a eliminar: "+ JSON.stringify(node));

            // Tengo que hacer referencia directamente el árbol con el indice si quiero eliminar tal nodo. ¿como debo llevar cuenta del indice?.
            delete  node; // Esta linea no funciona

        }else{

            // Puedo renombrar el nombre del nodo
            node.name = "www.forosdelweb.com";

        }




        if(node.children  != 'undefined'){
            test(node.children);
        }


    });


};

test(tree);

console.log(JSON.stringify(tree));
__________________
Lo que se usar (JAVA, Spring MVC, IntelliJ IDEA , GAE, CakePHP, Bootstrap, Underscorejs, jQuery, HTML5, CSS3, JSON, Ajax, Prototype), Aprendiendo a usar Angularjs y Git.

Última edición por romel_inc; 24/08/2013 a las 03:35
  #2 (permalink)  
Antiguo 26/08/2013, 03:07
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 2 meses
Puntos: 30
Respuesta: Como tener el control de los indices de un objeto, de forma recursiva.

Los nodos se crean y destruyen, hasta donde yo se, no se puedes destruir un nodo padre, sin evitar destruir todo lo que este tenga dentro.

Etiquetas: control, forma, funcion, js, objeto, tener
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:56.