满口金牙 2022-06-05 01:49 采纳率: 91.5%
浏览 738
已结题

js 数组中多层嵌套对象,怎么递归取得,某id 对象的路径

数组中多层嵌套对象,怎么递归取得,某id 对象的路径

  const arr =[
    { id:'1',
      title:'a',
      children:[
        {id:'33',
         title:'axx',
         children:[{ id:'121111',title:'hh'},] 
        },
        {id:'34',title:'xxddf',}
      ]
    },
    { id:'2',title:'bxx'}
     //  略...
  ]
 // 找出 id为 121111 对象的路径, 返回一个数组: [第一层的 title,第三层的title ,第n层的 title ,自已的 title]

下面这样写不行,只能找到自已这层,没有父级路径


  function pathCompute(arr, key, path = []){
    for( let i = 0, len = arr.length; i < len; i++){
      path.push(arr[i].title)
      if( arr[i].key === key){
         console.log('找到了', path)
         return path
      } else if(arr[i].children && arr[i].children.length >= 1){
        pathCompute(arr[i].children, key, path)
      } else {
        path = [] // 没找到就清空数组,下循环重新写路径,但这样写不行
      }
    }
  }



  • 写回答

3条回答 默认 最新

  • 关注

    你题目的解答代码如下:

      const arr =[
        { id:'1',
          title:'a',
          children:[
            {id:'33',
             title:'axx',
             children:[{ id:'121111',title:'hh'},] 
            },
            {id:'34',title:'xxddf',}
          ]
        },
        { id:'2',title:'bxx'}
         //  略...
    ]
    // 找出 id121111 对象的路径, 返回一个数组: [第一层的 title,第三层的title ,第n层的 title ,自已的 title]
     
    function pathCompute(arr, key, path = []){
        for( let i = 0, len = arr.length; i < len; i++){
            path.push(arr[i].title);
            if( arr[i].id === key){
                console.log('找到了');
                return path;
            } else if(arr[i].children && arr[i].children.length >= 1){
                if(pathCompute(arr[i].children, key, path)!=false)
                    return path;
              }
            path.pop();
        }
        return false;
    }
    console.log(pathCompute(arr, '121111')); 
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月16日
  • 已采纳回答 6月8日
  • 创建了问题 6月5日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站