Giter VIP home page Giter VIP logo

treewalker's Introduction

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 : []
		}]
	}]
};	

treewalker's People

Contributors

gitter-badger avatar prashanth-nelli avatar thure avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.