技术解析
function traverseTree (tree, cb, isNodeFirst) {
if (isNodeFirst) {
for (let i = 0; i < tree.length; i++) {
cb(tree[i], i, tree)
if (tree[i].children && tree[i].children.length > 0) {
traverseTree(tree[i].children, cb)
}
}
} else {
for (let i = 0; i < tree.length; i++) {
if (tree[i].children && tree[i].children.length > 0) {
traverseTree(tree[i].children, cb)
}
cb(tree[i], i, tree)
}
}
}