Skip to content

jniac/js-tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 

Repository files navigation

js-tree

Minimal code to implement a tree (graph) in javascript (es2015)  

──┬─ Node#0 {}
  ├─┬─ Node#1 {}
  │ └─── Node#2 {}
  └─── Node#3 {}

Features:

  • iteration:
for (let child of parentNode) 
    ...
  • deep iteration:
for (let anyChild of parentNode.allChildren()) 
    ...
  • chain style & easy one-or-several methods :
node
    .append(new Node(), new Node(), new Node())
    .appendTo(anotherNode)
  • 'reversible point of view':
node.append(anotherNode) 
// ===
anotherNode.appendTo(node)

node.remove(anotherNode) 
// ===
anotherNode.detach() 
  • walk:
root.walk(node => ...)
  • graph string preview:
console.log(node.toGraphString())

/* something in the following form:

──┬─ Node#0 {}
  ├─┬─ Node#1 {}
  │ └─── Node#2 {}
  └─── Node#3 {}

*/

QUESTION:
Universality
Should node methods be available for existing objects / classes?
eg:

Node.implementNode(MyClass)
let myInstance = new MyClass()
myInstance.appendTo(myNode)

basic usage

example:

import { Node } from './node.js'

let n1 = new Node({ name: 'node 1' })
let n2 = new Node({ name: 'node 2' })
let n3 = new Node()
let n4 = new Node({ name: 'may the forth be with you'})

n1.append(n2)
n1.append(n3)
n1.append(n4)

n1.remove(n3) // === n3.detach()

n3.appendTo(n2) // === n2.append(n3)

for (let child of n1)
  console.log(child.name)
  
/* output

"node 2"
"may the forth be with you"

*/

console.log(n1.toGraphString())

/* output:

──┬─ Node#0 {}
  ├─┬─ Node#1 {}
  │ └─── Node#2 {}
  └─── Node#3 {}
  
*/

more complex graph (drawing hierarchy test):

n2.append(new Node().append(new Node()).append(new Node().append(new Node().append(new Node())).append(new Node()).append(new Node().append(new Node()))))
n2.append(new Node(), new Node(), new Node())

console.log(n1.toGraphString())

/* ouput:

──┬─ Node#0 {}
  ├─┬─ Node#1 {}
  │ ├─── Node#2 {}
  │ ├─┬─ Node#4 {}
  │ │ ├─── Node#5 {}
  │ │ └─┬─ Node#6 {}
  │ │   ├─┬─ Node#7 {}
  │ │   │ └─── Node#8 {}
  │ │   ├─── Node#9 {}
  │ │   └─┬─ Node#10 {}
  │ │     └─── Node#11 {}
  │ ├─── Node#12 {}
  │ ├─── Node#13 {}
  │ └─── Node#14 {}
  └─── Node#3 {}
  
*/

About

Minimal code to implement a tree (graph) in javascript

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors