Advertisement
Jaood_xD

TableOfContent2Tree

Feb 12th, 2022
1,467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const util = require('util');
  2. let text =
  3.     `#1
  4.     ##1.1
  5.         ###1.1.1
  6.             ####1.1.1.1
  7.             ####1.1.1.2
  8.          ###1.1.2
  9.             ####1.1.2.1
  10.     ##1.2
  11.           ###1.2.1
  12. #2...`;
  13. let rows = text.split('\n').map((x, i) => ({
  14.     value: x.trimStart(),
  15.     index: i
  16. })).map(x => ({
  17.     name: x.value.match(/(?<=#+)[^#]+/)[0],
  18.     level: x.value.match(/#*(?=[^#])/)[0].length,
  19.     index: x.index
  20. }));
  21. rows.forEach(x=> x.parent_id=rows.filter(y=> y.index<x.index && y.level<x.level).pop()?.index);
  22. console.log('Размеченный список оглавления:', rows);
  23. let tree = {};
  24. const makeTree = (nodes, parentId) => {
  25.     return nodes
  26.         .filter((node) => node.parent_id === parentId)
  27.         .reduce(
  28.             (tree, node) => [
  29.                 ...tree,
  30.                 {
  31.                     ...node,
  32.                     children: makeTree(nodes, node.index),
  33.                 },
  34.             ],
  35.             [],
  36.         )
  37. };
  38. tree = makeTree(rows,undefined);
  39. console.log("Дерево: ",util.inspect(tree,false,10,true));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement