根据ID获取该节点的所有父节点的对象

var data2= [
      {
        "nodeType": 1,
        "nodeName": "NA61",
        "children": [
          {
            "nodeType":2,
            "nodeName":"A",
            "children": [
              {
                "nodeType":3,
                "nodeName":"A2-1.NA61",
                "children":[
                  {
                    "nodeType":4,
                    "nodeName":"A",
                    "children": [
                      {"nodeType":5,"nodeName":"A10","children":null},
                      {"nodeType":5,"nodeName":"A11","children":null},
                      {"nodeType":5,"nodeName":"A01","children":null},
                      {"nodeType":5,"nodeName":"A12","children":null},
                      {"nodeType":5,"nodeName":"A02","children":null},
                      {"nodeType":5,"nodeName":"A13","children":null},
                      {"nodeType":5,"nodeName":"A03","children":null},
                      {"nodeType":5,"nodeName":"A14","children":null},
                      {"nodeType":5,"nodeName":"A04","children":null},
                      {"nodeType":5,"nodeName":"A15","children":null},
                      {"nodeType":5,"nodeName":"A05","children":null},
                      {"nodeType":5,"nodeName":"A16","children":null},
                      {"nodeType":5,"nodeName":"A06","children":null},
                      {"nodeType":5,"nodeName":"A07","children":null},
                      {"nodeType":5,"nodeName":"A08","children":null},
                      {"nodeType":5,"nodeName":"A09","children":null}
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ];
    // 如果开发 数据中没有返回一个唯一标识的话,自己和下面一样遍历下,自动添加 customId 当作数据中的唯一标识
    function renderTreeFunc(data) {
      let arrs = [];
      let i = 1;
      const loopFunc = function(data) {
        const rets = [];
        let obj = {};
        if (data.length > 0) {
          data.forEach(item => {
            const temp = { ...item };
            const { nodeName, nodeType } = item;
            obj = {
              'nodeName': nodeName,
              'nodeType': nodeType,
              'customId': i++,
            };
            if (temp.children && temp.children.length) {
              temp.children = loopFunc(temp.children);
              obj['children'] = temp.children;
            }
            rets.push(obj);
          })
        }
        return rets;
      }
      if (data && data.length) {
        arrs = loopFunc(data);
      }
      return arrs;
    }
    const rets = renderTreeFunc(data2);
    console.log('-----rets----', rets);
    /*
     * 上面返回宕数据如下:
     [
       {
         "nodeName": "NA61",
         "nodeType": 1,
         "customId": 1,
         "children": [
            {
              "nodeName": "A",
              "nodeType": 2,
              "customId": 2,
              "children": [
                {
                  "nodeName": "A2-1.NA61",
                  "nodeType": 3,
                  "customId": 3,
                  "children": [
                    {
                      "nodeName": "A",
                      "nodeType": 4,
                      "customId": 4,
                      "children": [
                        { "nodeName": "A10", "nodeType": 5, "customId": 5 },
                        { "nodeName": "A11", "nodeType": 5, "customId": 6 },
                        { "nodeName": "A01", "nodeType": 5, "customId": 7 },
                        { "nodeName": "A12", "nodeType": 5, "customId": 8 },
                        { "nodeName": "A02", "nodeType": 5, "customId": 9 },
                        { "nodeName": "A13", "nodeType": 5, "customId": 10 },
                        { "nodeName": "A03", "nodeType": 5, "customId": 11 },
                        { "nodeName": "A14", "nodeType": 5, "customId": 12 },
                        { "nodeName": "A04", "nodeType": 5, "customId": 13 },
                        { "nodeName": "A15", "nodeType": 5, "customId": 14 },
                        { "nodeName": "A05", "nodeType": 5, "customId": 15 },
                        { "nodeName": "A16", "nodeType": 5, "customId": 16 },
                        { "nodeName": "A06", "nodeType": 5, "customId": 17 },
                        { "nodeName": "A07", "nodeType": 5, "customId": 18 },
                        { "nodeName": "A08", "nodeType": 5, "customId": 19 },
                        { "nodeName": "A09", "nodeType": 5, "customId": 20 }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    */
    // 根据id获取该节点的所有父节点的对象
    function getParentsId(list, id) {
      for (let i in list) {
        if (list[i].customId == id) {
          return [list[i]];
        }
        if (list[i].children) {
          let node = getParentsId(list[i].children, id);
          if (node !== undefined) {
            return node.concat(list[i]);
          }
        }
      }
    }
    const newArrs = getParentsId(rets, 11);
    console.log('----newArrs---', newArrs);

    // 打印数据如下:
    /*
    [
      { nodeName: "A03", nodeType: 5, customId: 11 },
      { nodeName: "A", nodeType: 4, customId: 4, children: []},
      { nodeName: "A2-1.NA61", nodeType: 3, customId: 3, children: []},
      { nodeName: "A", nodeType: 2, customId: 2, children: [] },
      { nodeName: "NA61", nodeType: 1, customId: 1, children: []}
    ]
    */

Original: https://www.cnblogs.com/tugenhua0707/p/15782877.html
Author: 龙恩0707
Title: 根据ID获取该节点的所有父节点的对象

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/553802/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 基于英雄联盟的知识图谱问答系统

    介绍 代码地址:https://github.com/taishan1994/lol_knowledge_graph_qa 该文介绍了英雄联盟知识图谱的构建以及搭建一个简单的基于知…

    技术杂谈 2023年6月1日
    0144
  • 微信天气预报小程序实战开发

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    2023年5月31日
    0133
  • 《分享收获 社区支持农业指导手册》笔记

    什么是社区支持农业 社区支持农业是一种社区附近农民和吃这个农民生产的产品的人之间的联系。 食品生产者 + 食品消费者 + 每一年度的彼此承诺 = CSA和无数的可能性 这个相互承诺…

    技术杂谈 2023年5月31日
    099
  • 燕小千智能机器人让你告别传统人工客服运作模式

    ZKNOW 前台警报,某用户的提问因为不能及时得到响应,投诉企业的服务太差这种场景是不是经常出现? 人工客服是一对一,还是一对N?企业因此付出了巨大的人力成本,依然无法提高用户的满…

    技术杂谈 2023年7月23日
    097
  • 已知UIScrollView放大后的Frame和放大之前的Frame计算放大的瞄点坐标

    有时候在缩放后,需要知道该次缩放是在哪个坐标开始缩放的。如上篇已知缩放的点,然后在该点对其缩放。本篇其实是逆运算 (x,y)就是当初在该点进行缩放 化简之后很简单,代码如下: -(…

    技术杂谈 2023年5月31日
    090
  • Linux下Oracle单实例配置多监听

    Oracle单实例配置多监听 一、前言 有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单…

    技术杂谈 2023年6月21日
    098
  • [转]到底什么是“信创”

    本文转自:https://m.thepaper.cn/baijiahao_13661473 以下文章来源于鲜枣课堂 ,作者小枣君 鲜枣课堂 学通信,学5G,就上鲜枣课堂! 我已加入…

    技术杂谈 2023年5月30日
    0100
  • 如何做一个有质量的技术分享(转)

    分享信息并不难,大多数人都能做到,就算是不善言谈性格内向的技术人员,通过博客或社交媒体,或是不正式的交流,他们都能或多或少的做到。 但是如果你想要做一个有质量有高度的分享,这个就难…

    技术杂谈 2023年6月1日
    0120
  • 好了歌 西江月

    好了歌 朝代:清代 |作者:曹雪芹 世人都晓神仙好,惟有功名忘不了!古今将相在何方?荒冢一堆草没了,世人都晓神仙好,只有金银忘不了!终朝只恨聚无多,及到多时眼闭了,世人都晓神仙好,…

    技术杂谈 2023年5月31日
    088
  • 自动化测试系列(一)自动化测试体系概述

    当今激烈的商业竞争中,企业中的服务和产品需要更快速的版本迭代和高质量的软件交付,同时减少完成项目所需的成本和时间,不少企业引入了DevOps概念来提升软件研发交付效率。DevOps…

    技术杂谈 2023年7月23日
    0107
  • Linux查看日志文件写入速度的4种方法

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介 有时,我们需要查看某个文件的增长速度,如日志文件,以此来感受系统的负载情况,因为一般情况下,日…

    技术杂谈 2023年7月24日
    0100
  • 【赵渝强】《大数据原理与实战》新书上市!!!

    经过近一年的等待,《大数据原理与实战》新书上市!!先睹为快!!!本书涵盖了大数据生态圈体系中的组件,力求用一本书完整地介绍大数据生态体系。本书涵盖了大数据平台体系中的Hadoop生…

    技术杂谈 2023年7月24日
    084
  • html大文件传输方案

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (…

    技术杂谈 2023年5月30日
    085
  • HBase二次开发之搭建HBase调试环境,如何远程debug HBase源代码

    版本HDP:3.0.1.0HBase:2.0.0 一、前言 之前的文章也提到过,最近工作中需要对HBase进行二次开发(参照HBase的AES加密方法,为HBase增加SMS4数据…

    技术杂谈 2023年7月24日
    070
  • C#使用Google实现在线翻译

    本文部分参考了GitHub中wadereye的代码,在源代码基础上修改了部分针对tkk的筛选及使用逻辑。 由于谷歌的tkk值规则一直在变,且api的url也不是固定的,所以做了配置…

    技术杂谈 2023年5月30日
    0130
  • Mall商城的高级篇的开发(二)性能压测和性能监控

    Mall商城的高级篇的开发(二) 性能压测–压力测试 压力测试考察当前软件硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在。压测都是为了系统在上线的处理能力和稳…

    技术杂谈 2023年7月11日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球