iview树结构——循环嵌套数组向上查找父级

需求:iview中树结构,点击某一个节点获得它上面的父节点
举例:如下图
在这里插入图片描述
点击树结构上的节点 parent 2-2 ,向上查找,找到它的父级节点 parent 2

树节点数据结构:
在这里插入图片描述
实现思路:1、拆分嵌套数组为一个个小单元(注意:此树的数据中,每个节点都含有两个属性 objectIdparentId ,根据每个节点的 parentId 向上去查找它的父级节点
2、循环拆分好的数组,进行递归查找
在这里插入图片描述
完整代码如下:

<template>
	<div class="tree-box">
		<h4>树结构——循环嵌套数组向上查找父级</h4>
		<Tree :data="testData" @on-select-change="treeSelect"></Tree>
	</div>	
</template>

<script>
	import Vue from 'vue'
	export default {
		data(){
			return {
        dataList:[],
        testData:[  //树的数据
            {
                id:1,
                objectId: "1",
                parentId: "0",
                name:'parent 1',
                title:'parent 1',
                age:20,
                expand:true,
                children:[
                    {
                        id:11,
                        objectId: "11",
                        parentId: "1",
                        name:'parent 1-1',
                        title:'parent 1-1',
                        age:'20',
                        children:[]
                    }
                ]
            },
            {
                id:2,
                objectId: "2",
                parentId: "0",
                name:'parent 2',
                title:'parent 2',
                age:30,
                expand:true,
                children:[
                    {
                        id:21,
                        objectId: "21",
                        parentId: "2",
                        name:'parent 2-1',
                        title:'parent 2-1',
                        age:'20',
                        children:[]
                    },
                    {
                        id:22,
                        objectId: "22",
                        parentId: "2",
                        name:'parent 2-2',
                        title:'parent 2-2',
                        age:'21',
                        expand:true,
                        children:[
                            {
                                id:221,
                                objectId: "221",
                                parentId: "22",
                                name:'parent 2-2-1',
                                title:'parent 2-2-1',
                                age:'13',
                                children:[]
                            }
                        ]
                    }
                ]
            },
        ]
			}
    },
    created(){
      this.testForEach()
    },
	methods:{
			//循环嵌套数组拆分
      testForEach(){
          this.testData.forEach(item =>{
              this.dataList.push(item)
              if(item.children.length>0){
                  this.getChem(item.children)
              }
          })
      },
      getChem(data){
          let item = data
          const arr = []
          item.forEach(val =>{
              this.dataList.push(val)
              if (val.children.length > 0) {
                  this.getChem(val.children)
              }
          })
      },
      //点击树节点触发事件
      treeSelect(item){
        console.log('item',item)
        let data = item[0]
        this.getParent(data.parentId)
      },
      //循环嵌套数组向上查找其父级
      getParent(id){
        this.dataList.forEach(item =>{
          if(item.objectId === id){
            console.log('parentObj',item)
          }
        })
      }
	}
 }
</script>

<style scoped>
	.tree-box{
    padding:50px 0;
  }
</style>

运行后,结果如下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值