diff --git a/code/Context.js b/code/Context.js index e69de29..39ceaa4 100644 --- a/code/Context.js +++ b/code/Context.js @@ -0,0 +1,10 @@ +class Context { + constructor(level = 0, isLast = false) { + this.level = level; + this.isLast = isLast; + } +} + +module.exports = { + Context, +} diff --git a/code/tree-logger.js b/code/tree-logger.js index 5450853..f3edf0f 100644 --- a/code/tree-logger.js +++ b/code/tree-logger.js @@ -1,4 +1,39 @@ -const treeLogger = (tree, context) => {}; +const {Context} = require("./Context"); +const treeLogger = (tree, context) => { + if (context.level === 0) { + console.log(tree.name); + + if (tree.items) { + for (let i = 0; i < tree.items.length; ++i) { + const subtree = tree.items[i]; + const lastIndex = tree.items.length - 1; + const ctx = new Context(context.level + 1, (i === lastIndex)); + + treeLogger(subtree, ctx); + } + } + } else if (context.level === 1) { + const rootChar = context.isLast ? '└ ' : '├ '; + console.log(rootChar + tree.name); + if (tree.items) { + for (let i = 0; i < tree.items.length; ++i) { + const subtree = tree.items[i]; + const lastIndex = tree.items.length - 1; + const ctx = new Context(context.level + 1, (i === lastIndex)); + + treeLogger(subtree, ctx); + } + } + } else { + let print = '' + while (--context.level) { + print += '|' + } + + print += (context.isLast ? '└ ' : '├ '); + console.log(print + tree.name); + } +}; module.exports = { treeLogger diff --git a/task1.js b/task1.js index 8b8de9d..3859b52 100644 --- a/task1.js +++ b/task1.js @@ -10,4 +10,4 @@ treeLogger({ "name": 5, "items": [{ "name": 6 }] }] -}, new Context(false, 0)); +}, new Context());