Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/08/2013, 03:25
Avatar de romel_inc
romel_inc
 
Fecha de Ingreso: diciembre-2007
Ubicación: Venezuela-monagas
Mensajes: 288
Antigüedad: 16 años, 5 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