我有以下问题:
我有这个字符串,看起来像这样:
* item1
* item2
** item21
** item22
* item3
** item31
** item32
***item321
* item4
这类似于无序嵌套列表,(这意味着,item21和item22是项目2的子类别,等等)。
我想用javascript / node.js代码编写,其中输出就是这样
array = [
"item1",
"item2 item21",
"item2 item22",
"item3 item31",
"item3 item32 item321",
"item4"
];
正如您在输出中看到的那样,显示文本的项目按类别和子类别合并。
我的想法是以某种方式使用递归函数。之前,我使用换行符分隔符将文本拆分为数组。然而,不知何故,我坚持认识到这个功能。
对于任何想法或伪代码/代码,我将感到高兴和感激。再次感谢你们。
这是一个让你入门的片段。
请注意,您的示例输入存在轻微的不一致,因此我冒昧地假设它是一个拼写错误。具体来说,你的输入的倒数第二行***item321
在*
之后缺少一个空格。我认为这是一个错字,但如果没有,请随意从我的正则表达式中删除空格。
let input = `
* item1
* item2
** item21
** item22
* item3
** item31
** item32
*** item321
* item4
`;
let lines = input
.split('\n')
.filter(a => a)
.map(line => {
let [_, stars, value] = line.match(/^(\**) (.*)/);
return {depth: stars.length, value};
});
let hierarchy = [];
let output = [];
lines.forEach((line) => {
if (hierarchy.length && line.depth <= hierarchy[hierarchy.length - 1].depth)
output.push(hierarchy.map(a => a.value).join(' '));
while (hierarchy.length && line.depth <= hierarchy[hierarchy.length - 1].depth)
hierarchy.pop();
hierarchy.push(line);
});
output.push(hierarchy.map(a => a.value).join(' '));
console.log(output);