treewalker

1.1.5 • Public • Published

treewalker

Join the chat at https://gitter.im/Prashanth-Nelli/treewalker

NPM Version Build Status

A simple recursive tree walker

how to use treewalker

treewalker exposes two methods walktree and resolveTree

walktree:-

walktree expects three parameters parentnode,childkey,callback function

parentnode:- first one parent node it should be an object

childkey:- second one childkey is the key which holds the children of parentnode

for Example:-

    
    var node={
        name:'parent',
        childs:[{
            name:'child1'
            childs:[]
        }]
    }
 

in the above example childkey value should be childs and it should be same for children also

callback fn :-

after visiting each node in the parent node this callback function is called with visited node as a

parameter

Note:- this method should only used for traversing the tree and you visit every node in the tree.

so callback function should be used for logging the properties are storing node values into other variables.

in the callback u should not add any properties to object u get in the callback for those operations use the

         resolveTree

In Browser:-

 
var node = {
    name : 'parent',
   childs : [{
        name:'ch1',
        childs:[{
        name:'ch2',
        childs:[]
    },{
        name:'ch3',
        childs:[]
      }]
   }]
};
 
function callback(obj) {
    console.log(obj.name);
}
 
window.walkTree(node,'childs',callback);
 
output:-
 
parent
ch1
ch2
ch1
ch3
    
 

In Node.js:-

 
    var tree = require('treewalker');
 
    var node = {
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : []
    }, {
        name : 'ch2',
        childs : []
    }, {
        name : 'ch3',
        childs : []
    }]
};
 
function callback(obj) {
    console.log(obj.name);
}
 
tree.walkTree(node, 'childs', callback);
 
 
output:-
 
parent
ch1
ch2
ch1
ch3
 
 

resolveTree:-

resolveTree expects three parameters parentnode,childkey,callback function

parentnode:- first one parent node it should be an object

childkey:- second one childkey is the key which holds the children of parentnode

callback:- a function which will be called on every node in the tree. function should contain compare logic and it should return true when match found callback function will receive three parameters node,siblings,index.

   node:- the current node in the tree
   siblings:- childs of current node's parent which includes the current node.
   index:- current node's index position in the parent node's child array.
   	   this value can be used to delete that node along with all it's 
   	   children.

Examples:-

Node Addition:-

 
var myResult={};
 
var node = {
        name : 'parent',
        childs : [{
            name : 'ch1',
            childs : [{
                name : 'ch2',
                childs : []
            }, {
                name : 'ch3',
                childs : []
            }]
        }]
    };
 
    function callback(obj,siblings,index) {
        if(obj.name=="ch1"){
            obj.childs.push({
               name : 'ch4',
               childs : []
              });
             return true;
        }
    };
    
    window.resolveTree(node, 'childs', callback);
    
    console.log(node);
 

output:-

 
{
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : [{
            name : 'ch2',
            childs : []
        }, {
            name : 'ch3',
            childs : []
        },{
            name:'ch4',
            childs:[]
        }]
    }]
};
 
 

In Node.js:-

 
var tree = require('treewalker');
 
var myResult={};
 
var node = {
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : [{
            name : 'ch2',
            childs : []
        }, {
            name : 'ch3',
            childs : []
        }]
    }]
};
 
    function callback(obj,siblings,index) {
        if (obj.name == "ch1") {
            obj.childs.push({
               name : 'ch4',
               childs : []
            });
        return true;
        }
    };
    
    tree.resolveTree(node, 'childs', callback);
 
    console.log(node);
 

output:-

 
{
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : [{
            name : 'ch2',
            childs : []
        }, {
            name : 'ch3',
            childs : []
        },{
            name:'ch4',
            childs:[]
        }]
    }]
};
 
 

Node Deletion:-

 
var node = {
        name : 'parent',
        childs : [{
            name : 'ch1',
            childs : [{
                name : 'ch2',
                childs : []
            }, {
                name : 'ch3',
                childs : []
            }]
        }]
    };
 
    function callback(obj,siblings,index) {
        if(obj.name === "ch1"){
             siblings.splice(index,1);
             return true;
        }
    };
    
    window.resolveTree(node, 'childs', callback);
    
    console.log(node);
 

output:-

 
{
    name : 'parent',
    childs : []
};
 
 

In Node.js:-

 
var tree = require('treewalker');
 
var myResult={};
 
var node = {
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : [{
            name : 'ch2',
            childs : []
        }, {
            name : 'ch3',
            childs : []
        }]
    }]
};
 
    function callback(obj,siblings,index) {
        if (obj.name === "ch2") {
              siblings.splice(index,1);
            return true;
         }
    };
    
    tree.resolveTree(node, 'childs', callback);
 
    console.log(node);
 

output:-

 
{
    name : 'parent',
    childs : [{
        name : 'ch1',
        childs : [{
            name : 'ch3',
            childs : []
        }]
    }]
};
 
 

Package Sidebar

Install

npm i treewalker

Weekly Downloads

22

Version

1.1.5

License

MIT

Last publish

Collaborators

  • nelli.prashanth