javascript - 叉树先序遍历问题,如何取得每一个数据所在的层数?

查看:116
本文介绍了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层,请问应该怎么做呢?

谢谢!

解决方案

加个标志就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)
        }
    }
}

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

这篇关于javascript - 叉树先序遍历问题,如何取得每一个数据所在的层数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆