技术解析

这段代码有办法更优雅一点吗?
0
2021-08-10 00:39:31
idczone
  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)
      }
    }
  }

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

多谢

traverseTree(tree[i].children, cb) 这个递归调用, 是不是漏了 isNodeFirst 的参数



用 xpath 可以一次性获取全部节点,不用递归查找
const arr = [];
for( let result = document.evaluate('//node()', document ) , next ; next = result.iterateNext() ; arr.push(next) );
console.log(arr);


不是遍历 DOM 的。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服