这段代码有办法更优雅一点吗?

2021-06-22 17:02:32 +08:00
 waiaan
  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)
      }
    }
  }
2420 次点击
所在节点    JavaScript
6 条回复
breezeFP
2021-06-22 17:15:17 +08:00
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)
}
}
}
waiaan
2021-06-22 17:31:44 +08:00
@breezeFP 多谢
powerfj
2021-06-22 17:44:45 +08:00
@waiaan traverseTree(tree[i].children, cb) 这个递归调用, 是不是漏了 isNodeFirst 的参数
waiaan
2021-06-22 19:58:47 +08:00
@powerfj
autoxbc
2021-06-23 00:51:03 +08:00
用 xpath 可以一次性获取全部节点,不用递归查找

const arr = [];
for( let result = document.evaluate('//node()', document ) , next ; next = result.iterateNext() ; arr.push(next) );
console.log(arr);
waiaan
2021-06-23 09:48:09 +08:00
@autoxbc
不是遍历 DOM 的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/785123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX