CMD 命令行中的 tree 样式输出

来源:互联网 发布:淘宝售前客服岗位职责 编辑:程序博客网 时间:2024/06/15 18:08

从很早就对各种命令行中输出的特殊样式感兴趣,最常见的就是 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);}

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

0 0
原创粉丝点击