递归树形数据,只要找到了想要的任意一个节点即可一级一级退出递归

[
  {
    "id": 913,
    "parent_id": 0,
    "category_name": "中西成药",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 9124,
        "parent_id": 9123,
        "category_name": "呼吸系统",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 925,
        "parent_id": 9123,
        "category_name": "心脑血管",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9126,
        "parent_id": 913,
        "category_name": "消化系统",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 917,
        "parent_id": 9123,
        "category_name": "抗生素类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9128,
        "parent_id": 9123,
        "category_name": "感冒清热",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 910,
        "parent_id": 9123,
        "category_name": "风湿跌打",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9132,
        "parent_id": 9123,
        "category_name": "妇科用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9136,
        "parent_id": 9123,
        "category_name": "五官用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9137,
        "parent_id": 9123,
        "category_name": "皮肤用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9138,
        "parent_id": 9123,
        "category_name": "其他外用",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9141,
        "parent_id": 9123,
        "category_name": "营养滋补",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9143,
        "parent_id": 9123,
        "category_name": "神经系统",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9145,
        "parent_id": 9123,
        "category_name": "其他内服药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9288,
        "parent_id": 9123,
        "category_name": "肝胆系统",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9289,
        "parent_id": 9123,
        "category_name": "泌尿系统",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9290,
        "parent_id": 9123,
        "category_name": "儿科用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9291,
        "parent_id": 9123,
        "category_name": "肿瘤用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9292,
        "parent_id": 9123,
        "category_name": "内分泌药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9293,
        "parent_id": 9123,
        "category_name": "肛肠用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9294,
        "parent_id": 9123,
        "category_name": "男科用药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9300,
        "parent_id": 9123,
        "category_name": "止痛镇痛",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:07:42 +0800 CST"
  },
  {
    "id": 9154,
    "parent_id": 0,
    "category_name": "器械耗材",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 9158,
        "parent_id": 9154,
        "category_name": "跌打损伤类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9159,
        "parent_id": 9154,
        "category_name": "医用卫生材料类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9160,
        "parent_id": 9154,
        "category_name": "冷敷器具类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9161,
        "parent_id": 9154,
        "category_name": "康复理疗类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9162,
        "parent_id": 9154,
        "category_name": "注射穿刺器械类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9163,
        "parent_id": 9154,
        "category_name": "外科急救用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 964,
        "parent_id": 9154,
        "category_name": "床上护理用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9165,
        "parent_id": 9154,
        "category_name": "糖尿病护理用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9166,
        "parent_id": 9154,
        "category_name": "健康监测用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 917,
        "parent_id": 9154,
        "category_name": "计生用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9168,
        "parent_id": 9154,
        "category_name": "中医用品类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9169,
        "parent_id": 9154,
        "category_name": "其他类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:07:49 +0800 CST"
  },
  {
    "id": 9171,
    "parent_id": 0,
    "category_name": "中药",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 9172,
        "parent_id": 9171,
        "category_name": "中药材",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9173,
        "parent_id": 9171,
        "category_name": "精品中药",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9174,
        "parent_id": 9171,
        "category_name": "中药饮片",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:08:03 +0800 CST"
  },
  {
    "id": 9146,
    "parent_id": 0,
    "category_name": "食品保健",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 917,
        "parent_id": 9146,
        "category_name": "妇幼保健",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 948,
        "parent_id": 9146,
        "category_name": "基础营养",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9149,
        "parent_id": 9146,
        "category_name": "男士保健",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 910,
        "parent_id": 9146,
        "category_name": "女士营养",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 951,
        "parent_id": 9146,
        "category_name": "中老年保健",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9152,
        "parent_id": 9146,
        "category_name": "其他类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:08:08 +0800 CST"
  },
  {
    "id": 8856,
    "parent_id": 0,
    "category_name": "非药品",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 887,
        "parent_id": 8856,
        "category_name": "疤痕修护",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 860,
        "parent_id": 8856,
        "category_name": "适用五官",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 861,
        "parent_id": 8856,
        "category_name": "消毒用品",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 913,
        "parent_id": 8856,
        "category_name": "保健外用",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 9170,
        "parent_id": 8856,
        "category_name": "其他类",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 996,
        "parent_id": 8856,
        "category_name": "母婴健康",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 297,
        "parent_id": 8856,
        "category_name": "成人用品",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:08:14 +0800 CST"
  },
  {
    "id": 881,
    "parent_id": 0,
    "category_name": "美妆个护",
    "icon": "",
    "level": 0,
    "children": [
      {
        "id": 885,
        "parent_id": 8981,
        "category_name": "其他用品",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 915,
        "parent_id": 8981,
        "category_name": "美容护肤",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 916,
        "parent_id": 8981,
        "category_name": "个人护理",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      },
      {
        "id": 917,
        "parent_id": 8981,
        "category_name": "家居清洁",
        "icon": "",
        "level": 1,
        "children": null,
        "created_at": "0001-01-01 00:00:00 +0000 UTC"
      }
    ],
    "created_at": "2021-01-16 03:08:17 +0800 CST"
  }
]

methods:{

//首先需要在data中设置全局变量index,bool,arrSave

aaa(){

this.fz(this.categories, val[val.length - 1], 4)

第一个参数表示的是传入的要递归的数组,第二个参数是要查找任意一个节点的id,如果唯一键不是id,在下面对应的更改属性名称,注意其中ID的大小写,第三个参数,可以不要,当同一个页面有多个需要递归的数组时,用来区分这些数组,在

},

 //val:所有产品分类/属性的数据  arr:将后端返回的产品分类/属性的最后一级id  n:判断是分类(0表示分类)还是属性(1表示属性)的数据

    fz (val, ID, n) {

      val.every((val1, index1) => {

        if (n == 3 || n == 4) {   //如果有特殊需求,比如通过其他属性作为唯一键,就用这个if和else,如果没有需要就只使用else即可,3  4只是个示例

          this.arrSave[this.index] = { id: val1.id, category_name: val1.category_name }

        } else {

          this.arrSave[this.index] = val1.id

        }

        if (val[index1].children != null) {

          this.index++

          this.fz(val[index1].children, ID, n)

        } else {  //说明到了某一个末尾节点了

          if (val1.id == ID) {  //已经将需要的ID找到,将全局变量bool置为1

            this.bool = 1

//这个地方可以console this.arrSave的值 ,在这里处理获得的结果,如果不想在递归里面处理,那就在最后面将 this.arrSave return 出去

            }

          }

        }

        return this.bool == 0

      })

      if (this.bool == 0 && this.arrSave.length > 0) {

   //bool==0说明还没找到,并且这是数组中已经将当前值保存到了arrSave中,但实际上这个值并不是需要 的值,所以没找到就将这个值删除

        this.arrSave.pop()

      }

      if (this.index > 0) {

//并

        this.index--

      }


 

      if (this.index == 0 && this.bool == true) {

        //此时, index==0说明已经退到了最后一级,并且id也找到了,将bool重置为0,否则要在递归外面重置,那样会更麻烦,容易忘记

        this.bool = 0

        this.arrSave = []   //return  this.arrSave      //根据需求,如果最终想要的数据已经在找到对应ID时处理过了,那么这个值就可以清空了,如果想把最终得到的结果作为返回值那就return出去,不要清空,但是每次在调用方法 前,手动清空

      }

    },

}

//如果有什么不明白的联系qq:541496557

### 回答1: 好的,以下是用 JavaScript 编写递归查询树形节点的最深层级的代码示例: ```javascript function getDeepestLevel(node, level = 0) { if (!node.children || node.children.length === 0) { return level; } else { let maxLevel = level; for (let i = 0; i < node.children.length; i++) { const childLevel = getDeepestLevel(node.children[i], level + 1); if (childLevel > maxLevel) { maxLevel = childLevel; } } return maxLevel; } } ``` 其中,`node` 为树形节点,`level` 表示当前层级,初始默认为 0。如果节点没有子节点,则说明已经到达最深层级,返回当前层级。否则,遍历所有子节点递归调用 `getDeepestLevel` 方法,将当前层级加 1 传入,并取得最大的层级数,最后返回最大层级数即可。 ### 回答2: 可以使用JavaScript编写一个递归函数来查询树形节点的最深层级。如下所示: ```javascript function findMaxDepth(treeNode) { // 如果节点为空,则深度为0 if (treeNode === null) { return 0; } // 初始化最大深度为1 let maxDepth = 1; // 遍历节点的子节点 for(let i = 0; i < treeNode.children.length; i++) { // 递归调用findMaxDepth函数来获取子节点的最大深度 const childDepth = findMaxDepth(treeNode.children[i]); // 将子节点的最大深度加1与当前最大深度进行比较 maxDepth = Math.max(maxDepth, childDepth + 1); } return maxDepth; } // 示例数据,假设有如下树形结构 const tree = { value: 'A', children: [ { value: 'B', children: [ { value: 'C', children: [] }, { value: 'D', children: [] } ] }, { value: 'E', children: [] } ] }; // 调用函数来获取最大深度 const maxDepth = findMaxDepth(tree); console.log('最大深度为:', maxDepth); ``` 这段代码通过递归遍历树形结构的每个节点,然后比较每个子节点的最大深度并加1,最终返回整个树的最大深度。示例数据中的树形结构为: ``` A / \ B E / \ C D ``` 最大深度为3。 ### 回答3: 可以使用递归的方式来查询树形节点的最深层级。首先,我们需要定义一个函数来递归地查询每一个节点的层级。 我们可以传入两个参数给这个函数:要查询的节点和当前的层级。首先,我们判断这个节点是否有子节点。如果没有子节点,说明已经达到最深层级,我们返回当前的层级。如果有子节点,我们就需要对每一个节点进行递归的查询。 具体的实现代码如下: ```javascript function getDeepestLevel(node, level) { // 判断节点是否有子节点 if (node.children.length === 0) { return level; } else { let maxLevel = level; // 对每一个节点进行递归查询 for (let i = 0; i < node.children.length; i++) { let currentLevel = getDeepestLevel(node.children[i], level + 1); // 更新最深层级 if (currentLevel > maxLevel) { maxLevel = currentLevel; } } return maxLevel; } } ``` 使用方法如下: ```javascript // 假设我们有以下的节点结构 const tree = { value: 'A', children: [ { value: 'B', children: [ { value: 'D', children: [] }, { value: 'E', children: [] } ] }, { value: 'C', children: [ { value: 'F', children: [] }, { value: 'G', children: [ { value: 'H', children: [] } ] } ] } ] }; // 调用函数查询最深层级 const deepestLevel = getDeepestLevel(tree, 0); console.log(deepestLevel); // 输出:3 ``` 这样,我们就可以使用递归的方式查询树形节点的最深层级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

接着奏乐吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值