javascript - 叉树先序遍历问题,如何取得每一个数据所在的层数?
PHPz
PHPz 2017-04-11 11:34:29
[JavaScript讨论组]

我有一个数组对象:

let treeObj = {
    '1': [
        { '2': [{ '5': [{ '11': '11' }, { '12': '12' }, { '13': '13' }, { '14': '14' }] }] },
        { '3': [{ '6': '6' }, { '7': '7' }] },
        { '4': [{ '8': '8' }, { '9': '9' }, { '10': '10' }] }
    ]
}


通过先序遍历的方法,我能够按顺序取得所有的key值:

let traverseNode = (node) => {
    if (typeof node !== 'string') {
        let key = Object.keys(node)
        console.log(key)
        for (let i = 0; i < node[key].length; i++) {
            traverseNode(node[key][i])
        }
    }
}

traverseNode(treeObj)

/* 输出结果如下
[ '1' ]
[ '2' ]
[ '5' ]
[ '11' ]
[ '12' ]
[ '13' ]
[ '14' ]
[ '3' ]
[ '6' ]
[ '7' ]
[ '4' ]
[ '8' ]
[ '9' ]
[ '10' ]
*/

现在我想知道每一个key值所在的层数,比如['1']在第1层,[ '2' ][ '3' ][ '4' ]在第2层,请问应该怎么做呢?

谢谢!

PHPz
PHPz

学习是最好的投资!

全部回复(3)
阿神

加个标志就OK了

let traverseNode = (node, lv = 0) => {
    if (typeof node !== 'string') {
        let key = Object.keys(node)
        console.log(key, lv)
        for (let i = 0; i < node[key].length; i++) {
            traverseNode(node[key][i], lv++)
        }
    }
}

您看这样可以不

---分割线---

之前明显得错误,(自己掌嘴)

let traverseNode = (node, lv = 1) => {
    if (typeof node !== 'string') {
        let key = Object.keys(node)
        console.log(key, lv)
        for (let i = 0; i < node[key].length; i++) {
            traverseNode(node[key][i], lv + 1)
        }
    }
}

这样输出应该是符合题主意思的

巴扎黑

可以给 traverseNode 函数加个参数表示层级

         let traverseNode = (node, level) => {  // 增加个参数level表示当前node在第几层
             if (typeof node !== 'string') {
                 let key = Object.keys(node)
                 console.log(key[0]+"==="+level);
                 for (let i = 0; i < node[key].length; i++) {
                     traverseNode(node[key][i], level+1);
                 }
             }
         }

         traverseNode(treeObj, 1);  // 假设从第一层开始
PHP中文网

把深度也当作参数传进去就行了

function traverseNode(tree, deep = 0) {
    let ans;
    for(let i in tree) if(tree.hasOwnProperty(i)) {
        ans = i;
        break;
    }
    console.log("节点值:" + ans + ",深度:" + deep);
    if(tree[ans] instanceof Array) {
        for(let i = 0; i < tree[ans].length; i++) {
            traverseNode(tree[ans][i], deep + 1);
        }
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号