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