如何理解这段代码的运行?

2023-04-04 0 3,811
  function createTree(deep) {
            let children = {};
            let tree = { id: 0 ,children};
            for (let i = 1; i <= deep; i++) {
                children.id = i;
                children.children = {}
                children = children.children; //不太理解这里
            }
            return tree;
        }
        let tree = createTree(6);

看他每次循环都只生成了一个节点,怎么把他遍历到tree中的呢?

这段代码的运行你可以这样理解:
首先,创建一个空对象 children,然后创建一个对象 tree,它有两个属性:id 和 children,其中 id 的值为 0,children 的值为 children 对象的引用。
然后,进入一个 for 循环,循环的次数为 deep,也就是要创建的树的深度。在每次循环中,给 children 对象添加两个属性:id 和 children,其中 id 的值为 i,children 的值为一个空对象。然后,将 children 变量重新赋值为 children 对象的 children 属性的引用,也就是指向下一层的空对象。
这样,每次循环都会在上一层的 children 对象中添加一个新的 children 对象,并将 children 变量指向它。最终,形成了一个嵌套的对象结构,类似于这样:

{
  "id": 0,
  "children": {
    "id": 1,
    "children": {
      "id": 2,
      "children": {
        "id": 3,
        "children": {
          "id": 4,
          "children": {
            "id": 5,
            "children": {
              "id": 6,
              "children": {}
            }
          }
        }
      }
    }
  }
}

最后,返回 tree 对象作为结果。
可以看到,这段代码实际上是创建了一个单链表结构,每个节点只有一个子节点。如果要创建一个真正的树结构,需要在每层添加多个子节点,并且使用数组来存储子节点。

为防止混淆改一下, children 改为了 obj

  function createTree (deep) {
    let obj = {};
    let tree = { id: 0, obj };
    for (let i = 1; i <= deep; i++) {
      obj.id = i;
      // 给obj新建一个名字为children的键, 值为空对象
      obj.children = {}
    // 使用倒叙创建了 children 给obj, 
      // 然后将变量obj的值改为上面上面的新建的children, 其实就是改变了其指向
      obj = obj.children;
    }
    return tree;
  }
  let tree = createTree(6);
  console.log(tree);
如何理解这段代码的运行?
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 如何理解这段代码的运行? https://www.jkxiazai.com/1290.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务