数组根据一定的条件转化成树形结构

背景:右边表格中可以选择多选或者单选,选择之后租场树形结构,展示在左侧,主项名称不一样的,创建一个新的主项节点,主项名称一样子项名称不一样的,在相同主项下创建一个新的子项办理项节点。主项名称和子项名称都一样的在此子项下面创建办理项节点,
如下图所示:
在这里插入图片描述
实现思路如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码实现如下:

      // 右侧表格选择
      handleSelectionChange(val) {
        this.multipleSelection = val;
        // this.itemTree=this.arrayToTree(this.multipleSelection);
        console.log(this.multipleSelection);
        this.arrayToTree()
      },
      //将选中的数组转换为树
      arrayToTree(){
        this.itemTree=[]
        this.multipleSelection.forEach((item, index) => {
          this.box(item)
        })
        // console.log(this.itemTree)
      },

      box (data) {
        const oneRes = this.itemTree.find(x => x.label === data.majorName)
        if (!oneRes) {
          this.itemTree.push({
            label: data.majorName,
            children: [{
              label: data.minorName,
              children: [
                { label: data.itemName }
              ]
            }]
          })
        } else {
          this.itemTree.forEach((item, index) => {
            if(item.label===data.majorName) {

              // 相等的时候查找一级标签children下是否有相同的标签
              const findRes = item.children.find(x => x.label === data.minorName)
              // 判断是否找到相同的
              if (findRes) {
                // 找到二级相同的
                findRes.children.push({ label: data.itemName })
              } else {
                // 没找到相同的,就创建一条
                item.children.push({
                  label: data.minorName,
                  children: [
                    { label: data.itemName }
                  ]
                })
              }
            }
          })

        }
        console.log(this.itemTree)
      }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值