V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
waiaan
V2EX  ›  JavaScript

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

  •  
  •   waiaan · 2021-06-22 17:02:32 +08:00 · 2460 次点击
    这是一个创建于 1278 天前的主题,其中的信息可能已经有所发展或是发生改变。
      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)
          }
        }
      }
    
    6 条回复    2021-06-23 09:48:09 +08:00
    breezeFP
        1
    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
        2
    waiaan  
    OP
       2021-06-22 17:31:44 +08:00
    @breezeFP 多谢
    powerfj
        3
    powerfj  
       2021-06-22 17:44:45 +08:00
    @waiaan traverseTree(tree[i].children, cb) 这个递归调用, 是不是漏了 isNodeFirst 的参数
    waiaan
        4
    waiaan  
    OP
       2021-06-22 19:58:47 +08:00 via Android
    @powerfj
    autoxbc
        5
    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
        6
    waiaan  
    OP
       2021-06-23 09:48:09 +08:00
    @autoxbc
    不是遍历 DOM 的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:58 · PVG 17:58 · LAX 01:58 · JFK 04:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.