如何递归tree结构数据

如何递归tree结构数据。
就是这样的 ,我需要的是给我一个名字,比如总经办,我找到这个无限层级里面对应的位置,在这个对象中添加两个字段。

baseDataBm: [
        {
          title: "集团总部",
          expand: false, //是否展开子级
          children: [
            {
              title: "男科事业部",
            },
            {
              title: "总经办",
            },
            {
              title: "院内营销网络",
            },
          ],
        },
        {
          title: "客服",
          expand: false, //是否展开子级
          children: [
            {
              title: "客服关系管理",
            },
          ],
        },
      ],

递归 遍历


let baseDataBm = [
        {
            title: "集团总部",
            expand: false, //是否展开子级
            children: [
                {
                    title: "男科事业部",
                },
                {
                    title: "总经办",
                },
                {
                    title: "院内营销网络",
                },
            ],
        },
        {
            title: "客服",
            expand: false, //是否展开子级
            children: [
                {
                    title: "客服关系管理",
                },
            ],
        },
    ];

    function addFieldsToNode(node, targetName) {
        node.map((item) => {
            if (item.title == targetName) {
                //这里 加字段
                item.v = "xxx"
            }
            if (item.children && item.children.length > 0) {
                addFieldsToNode(item.children, targetName);
            }
        })
    }
    // 调用递归函数
    addFieldsToNode(baseDataBm, "总经办");
    console.log(baseDataBm)
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7803929
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:tree结构数据单选示例
  • 除此之外, 这篇博客: Tree组件实现文件目录——基础实现中的 一.准备阶段 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • {
        path: '/',
        alias: '/homee',
        name: 'Home',
        component: Layout,
        children: [
          {
            path: 'folder_tree',
            component: () => import('@/views/folder-tree/folder-tree.vue')
          }
        ]
      }
    
    export const getFolderList = () => {
      return axios.request({
        url: '/getFolderList',
        method: 'get'
      })
    }
    
    export const getFileList = () => {
      return axios.request({
        url: '/getFileList',
        method: 'get'
      })
    }
    
    //文件数据
    export const getFileList = () => {
      const template = {
        'name|5': '@cword',
        'creat_time': '@datetime',
        'folder_id|1-5': 0,
        'id|+1': 10000
      }
      let arr = []
      doCustomTimes(10, () => {
        arr.push(Mock.mock(template))
      })
      return arr
    }
    
    //文件夹数据
    export const getFolderList = () => {
      const template1 = {
        'name|1': '@word',
        'creat_time': '@datetime',
        'folder_id': 0,
        'id|+1': 1
      }
      const template2 = {
        'name|1': '@word',
        'creat_time': '@datetime',
        'folder_id': 1,
        'id|+1': 4
      }
      let arr = []
      doCustomTimes(3, () => {
        arr.push(Mock.mock(template1))
      })
      doCustomTimes(2, () => {
        arr.push(Mock.mock(template2))
      })
      return arr
    }
    
    
    import Mock from 'mockjs'
    // import { getUserInfo, login, authorization } from './response/user'
    import { getTableData, getFileList, getFolderList } from './response/data'
    // const Random = Mock.Random
    
    // Mock.mock(/\/getUserInfo/, 'post', getUserInfo)
    // Mock.mock(/\/login/, 'post', login)
    // Mock.mock(/\/authorization/, 'get', authorization)
    Mock.mock(/\/getTableData/, 'get', getTableData)
    Mock.mock(/\/getFileList/, 'get', getFileList)
    Mock.mock(/\/getFolderList/, 'get', getFolderList)
    
    // Mock.setup({
    //   timeout: 0
    // })
    
    // Random.extend({
    //   fruit () {
    //     const fruit = ['apple', 'peach', 'lemon']
    //     return this.pick(fruit)
    //   }
    // })
    
    export default Mock