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 |