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));


