利用栈来解决博客目录生成

在开发博客项目中,需要使用 markdown 生成了对应的文章,生成文章之后提取出来 h1 和 h2 标签来组成对应的目录结构。

示例 1:

输入: 
['H1', 'H1', 'H2', 'H2', 'H2', 'H1', 'H2']
输出: 
[{tag: 'h1', children: [{}, {}, {}]}, {tag: 'h1', children: []}] 


解题思路:

使用栈结构,stack 来进行存放 h1 标签。 使用另一个栈 o_stack 来保存当前所处的 h1 标签。 这样子,只需要匹配到后续的 h2 标签,就取 o_stack 栈顶元素。并将 h2 插入到 o_stack 元素。 最后的 o_stack 返回即可。

        var stack = [];
        var o_stack = [];
        var l = ['H1', 'H1', 'H2', 'H2', 'H2', 'H1', 'H2'];
        for (var i = 0, len = l.length; i < l.len; i++) {
            var dir = {
                tag: l[i],
                children: []
            }

            if (dir.tag === 'H1') {
                stack.push(dir);
                o_stack.push(dir.tag !== 'H1' ? this.o_stack[this.o_stack.length - 1] : dir);
            } else if (dir.tag === 'H2') {
                o_stack[o_stack.length - 1].children.push(dir);
            }
        }

        return o_stack;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值