树形结构已知子节点找父节点

时间:2022-07-23
本文章向大家介绍树形结构已知子节点找父节点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

假如结构树如下,如何根据已经的label寻找父级label,网上找了几个比较好的方法 

         var data = [{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: '一级 2',
          children: [{
            id: 5,
            label: '二级 2-1'
          }, {
            id: 6,
            label: '二级 2-2'
          }]
        }, {
          id: 3,
          label: '一级 3',
          children: [{
            id: 7,
            label: '二级 3-1'
          }, {
            id: 8,
            label: '二级 3-2'
          }]
        }]

 第一种方法

		function find(arr,label){
		 let stock =[]
		 let going = true
		 var warker = function(arr,label){
		    arr.forEach(item=>{
			     if (!going) return
				 stock.push(item.label)
			     if(item.label == label){
				    going = false
				 }else if(item.children){
				 warker(item.children,label)
				 }else{
				  stock.pop()
				 }
			})
			if(going)  stock.pop()
		 }
		 warker(arr,label)
		 return stock
		}
		console.log(find(data,"三级 1-1-2"))

第二种方法

		function formatTree(arr,levelInfo=""){
		   return arr.map(item =>{
		      const newParent =levelInfo? levelInfo+ '--' + item.id:''+item.id
			  const temp = {
			     ...item,
				 levelInfo:newParent
			  
			  }
			  if(item.children){
			     temp.children = formatTree(item.children,newParent)
			  }
			  return temp
		   })
		}
		console.log(formatTree(data))