js 树结构数据查找

查找下面这个数组所有的id

let arr = [
    {
        id: 1,
        children: [{
            id: 2,
            children: null
        }]
    },
    {
        id: 3,
        children: [{
            id: 4,
            children: null
        }]
    },
]

方法一:递归

对递归不了解的可以之前的一篇文章php的递归函数,虽然是用php写的,但是也很好理解

function findTreeNode(arr) {
    let ids = []
    function query(arr) {
        arr.forEach(item => {
            ids.push(item.id)
            if (item.children) {
                query(item.children)
            }
        })
    }

    query(arr)
    console.log(ids)
}

方法二:全遍历

利用数组,遍历所有节点,如果在当前节点还有子节点,就把子节点push进数组

这个方法巧妙在利用数组前出后进,直到遍历完所有元素

function findTreeNode1(itemStack) {
    let ids = []
    while (itemStack.length) {
        // 移除并返回第一个元素
        let item = itemStack.shift()
        ids.push(item.id)
        if (item.children) {
            itemStack = itemStack.concat(item.children)
        }
    }
    console.log(ids)
}
Leave a Reply

Your email address will not be published. Required fields are marked *