Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const util = require('util');
- let text =
- `#1
- ##1.1
- ###1.1.1
- ####1.1.1.1
- ####1.1.1.2
- ###1.1.2
- ####1.1.2.1
- ##1.2
- ###1.2.1
- #2...`;
- let rows = text.split('\n').map((x, i) => ({
- value: x.trimStart(),
- index: i
- })).map(x => ({
- name: x.value.match(/(?<=#+)[^#]+/)[0],
- level: x.value.match(/#*(?=[^#])/)[0].length,
- index: x.index
- }));
- rows.forEach(x=> x.parent_id=rows.filter(y=> y.index<x.index && y.level<x.level).pop()?.index);
- console.log('Размеченный список оглавления:', rows);
- let tree = {};
- const makeTree = (nodes, parentId) => {
- return nodes
- .filter((node) => node.parent_id === parentId)
- .reduce(
- (tree, node) => [
- ...tree,
- {
- ...node,
- children: makeTree(nodes, node.index),
- },
- ],
- [],
- )
- };
- tree = makeTree(rows,undefined);
- console.log("Дерево: ",util.inspect(tree,false,10,true));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement