树结构使用实例---实现数组和树结构的转换

本文介绍了如何在前端利用递归将后端返回的树形数据结构转换为列表数组,以便减少接口请求次数,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

一、为什么要用树结构?

本文将讲述一个实例,构造一棵树来实现数组和tree的转换,这在前端树结构中是经常遇到的

后端返回树结构方便管理,前端也只需要请求一次接口拿到所有数据

前端树转成数组后的效果图:

二、使用步骤

1.引入相关json

代码如下(示例):请下载资源

2.读入数据

代码如下(示例):


<!--
  * @author:yxm
  * @description复用教材 
-->
<template>
  <div class="whole-title-bj">
    <ul class="whole-title" v-for="(item,index) in Object.keys(dataForm)" :key="index">
      <li class="title-left">{{item}}</li>
      <li class="title-right">
        <div
          v-for="(item2, index2) in dataForm[item]"
          :key="index2"
          class="title-right-name common-cursor"
          :class="{ 'activate-index': selectForm[item] == item2.tag_id }"
          @click="selectClick(item, item2)"
        >
          {{ item2.tag_name }}
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
import nationalJson from "./national_lesson_tag.json" //测试

export default {
  name: '',
  data () {
    return {
      dataForm:{},//源数据
      selectForm:{},//选中当前
      selectMap:{},
    }
  },
  mounted(){
    this.initData(nationalJson.hierarchies[0])//测试
  },
  methods: {
    // 初始化数据递归
    initData(data) {测试
      let children = data.children;
      let hierarchy_name = data.hierarchy_name;
      let item = children[0];
      let tag_name = item.tag_name;
      this.$set(this.dataForm, hierarchy_name, children);
      this.$set(this.selectForm, hierarchy_name, item.tag_id);
      this.$set(this.selectMap, tag_name, item.tag_name);
      if(item.hierarchies) {
        this.initData(item.hierarchies[0]);
      }
    },
    // 点击选择教材
    selectClick(item, tag) {
      this.selectForm[item] = tag.tag_id;
      if(tag.children) {
        this.initData(tag.children[0]);
      }
      console.log(this.selectForm);
    },
  },
}
</script>

<style lang="scss" scoped>
/* @import url(); 引入css类 */
.whole-title-bj {
  width: 90%;
  .whole-title {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    .title-left {
      margin-right: 25px;
      color: #999999;
    }
    .title-right {
      width: 90%;
      display: flex;
      flex-wrap: wrap;
      line-height: 30px;
      &-name {
        padding: 0 20px;
        margin-bottom: 16px;
        margin-right: 20px;
        color: #000000;
      }
    }
  }
  .activate-index {
    color: #1e62ec !important;
    background: rgba(30, 98, 236, 0.1);
    border-radius: 17px;
    font-size: 14px;
  }
}
</style>

总结

使用递归把树转成列表数组,使得接口请求一次,前端自己组装结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值