CMD 命令行中的 tree 样式输出

从很早就对各种命令行中输出的特殊样式感兴趣,最常见的就是 tree.

例如在某个目录执行 tree 命令,显示如下树图:

F:.
└─tk
    └─mybatis
        ├─mapper
        │  ├─annotation
        │  ├─code
        │  ├─common
        │  │  ├─base
        │  │  │  ├─delete
        │  │  │  ├─insert
        │  │  │  ├─select
        │  │  │  └─update
        │  │  ├─condition
        │  │  ├─example
        │  │  ├─ids
        │  │  ├─rowbounds
        │  │  ├─special
        │  │  └─sqlserver
        │  ├─entity
        │  ├─generator
        │  ├─mapperhelper
        │  ├─provider
        │  │  └─base
        │  └─util
        └─spring
            └─mapper

这里使用JS简单实现上面的效果:

var PREFIX_BRANCH = '├─';//树枝
var PREFIX_TRUNK  = '│ ';//树干
var PREFIX_LEAF   = '└─';//叶子
var PREFIX_EMP    = '  ';//空

function tree(nodes, prefix){
    if(prefix == undefined){
        prefix = '';
    } else {
        prefix = prefix.replace(PREFIX_BRANCH, PREFIX_TRUNK);
        prefix = prefix.replace(PREFIX_LEAF, PREFIX_EMP);
    }
    for(var i = 0; i < nodes.length; i++){
        //最后一个是叶子
        if(i == nodes.length - 1){
            console.log(prefix + PREFIX_LEAF + nodes[i].text);
            if(('children' in nodes[i]) 
                && nodes[i].children != undefined 
                && nodes[i].children.length > 0){
                tree(nodes[i].children, prefix + PREFIX_LEAF);
            }
        }
        //树枝
        else {
            console.log(prefix + PREFIX_BRANCH + nodes[i].text);
            if(('children' in nodes[i]) 
                && nodes[i].children != undefined 
                && nodes[i].children.length > 0){
                tree(nodes[i].children, prefix + PREFIX_TRUNK);
            }
        }
    }
}

测试:

var treeData = [
    {
        text: '树根',
        children: [
            {
                text:'树枝',
                children: [
                    {
                        text:'叶子',
                        children: [
                            {
                                text:'叶子'
                            }
                        ]
                    }
                ]
            },{
                text:'叶子'
            }
        ]
    },{
        text: '树根',
        children: [
            {
                text:'树枝'
            },{
                text:'叶子'
            }
        ]
    }
];

tree(treeData);

输出结果:

├─树根
│ ├─树枝
│ │ └─叶子
│ │   └─叶子
│ └─叶子
└─树根
  ├─树枝
  └─叶子

应用到具体数组时,主要是对下面代码进行修改:

if(('children' in nodes[i]) 
    && nodes[i].children != undefined 
    && nodes[i].children.length > 0){
    tree(nodes[i].children, prefix + PREFIX_TRUNK);
}

判断当前节点是否有子节点(或者是否包含子文件),如果包含,就获得所有子节点去循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值