zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JS遍历树形数据

2023-09-27 14:22:17 时间

树形数据结构遍历某个key值

深度优先遍历(DFS)

let tree = [{
    id: '1',
    name: '节点1',
    children: [{
        id: '1-1',
        name: '节点1-1'
    }]
}, {
    id: '2',
    name: '节点2',
    children: [{
        id: '2-1',
        name: '节点2-1'
    }, {
        id: '2-2',
        name: '节点2-2',
        children: [{
            id: '2-2-1',
            name: '节点2-2-1'
        }]
    }]
}, {
    id: '3',
    name: '节点3'
}, {
    id: '4',
    name: '节点4'
}]

function treeIterator(tree, func) {
    tree.forEach((node) => {
        func(node)
        node.children && treeIterator(node.children, func)
    })
}

treeIterator(tree, (node) => {
    console.log(node.name)
})

循环实现

function treeIterator(tree, func) {
    let node, curTree = [...tree]
    while ((node = curTree.shift())) {
        func(node)
        node.children && curTree.unshift(...node.children)
    }
}
treeIterator(tree, (node) => {
    console.log(node.name)
})

广度优遍历

function treeIterator(tree, func) {
  let node, curTree = [...tree]
  while ((node = curTree.shift())) {
    func(node)
    node.children && curTree.push(...node.children)
  }
}
treeIterator(tree, (node) => {
  console.log(node.name)
})