vue深度优先遍历多层数组对象方式(相当于多棵树、三级树)

 更新时间:2022年08月23日 10:13:23   作者:Eli-sun  
这篇文章主要介绍了vue深度优先遍历多层数组对象方式(相当于多棵树、三级树),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

深度优先遍历多层数组对象

这个方法如果是对于下面的三级树的话可以拿到爷爷Id,自己Id,父亲Id;其实如果想要拿到label的话就把data.id换成data.label就行了

function treeFindPath(tree, func, path = []) {
        if (!tree) return []
        for (const data of tree) {
          path.push(data.id)
          if (func(data)) return path
          if (data.children) {
            const findChildren = treeFindPath(data.children, func, path)
            if (findChildren.length) return findChildren
          }
          path.pop()
        }
        return []
      }
      const i = treeFindPath(this.treeData, node => node.label === result)

比如树结构是这样的

这相当于是多可三级树

 "data": [
    {
      "id": "1",
      "label": "能动中心",
      "type": "1",
      "children": [
        {
          "id": "11",
          "label": "罐底视频",
          "type": "2",
          "children": [
            {
              "id": "111",
              "type": "3",
              "label": "四高炉6道"
            },
            {
              "id": "112",
              "type": "3",
              "label": "西渣罐底"
            }
          ]
        },
        {
          "id": "12",
          "label": "煤气柜站",
          "type": "2",
          "children": [
            {
              "id": "121",
              "type": "3",
              "label": "13号道口02"
            },
            {
              "id": "122",
              "type": "3",
              "label": "13号道口01"
            },
            {
              "id": "123",
              "type": "3",
              "label": "能动中心楼顶"
            }
          ]
        },
        {
          "id": "13",
          "label": "能动中心楼顶",
          "type": "2",
          "children": [
            {
              "id": "131",
              "type": "3",
              "label": "44455666"
            }
          ]
        }
      ]
    },
    {
      "id": "2",
      "label": "炼铁厂",
      "type": "1",
      "children": [
        {
          "id": "21",
          "label": "星云智联",
          "type": "2",
          "children": [
            {
              "id": "211",
              "type": "3",
              "label": "程控楼3楼"
            },
            {
              "id": "212",
              "type": "3",
              "label": "程控楼1楼过道西侧"
            },
            {
              "id": "213",
              "type": "3",
              "label": "程控楼2楼大厅"
            },
            {
              "id": "214",
              "type": "3",
              "label": "公司主楼5楼西侧"
            }
          ]
        },
        {
          "id": "22",
          "label": "翻车机溜车线区域",
          "type": "2",
          "children": [
            {
              "id": "221",
              "type": "3",
              "label": "炼钢球罐全貌1"
            }
          ]
        },
        {
          "id": "23",
          "label": "焦化化产作业区",
          "type": "2",
          "children": [
            {
              "id": "231",
              "type": "3",
              "label": "4#万立储槽全貌"
            },
            {
              "id": "232",
              "type": "3",
              "label": "4#万立中压氧压机"
            },
            {
              "id": "233",
              "type": "3",
              "label": "4#万立变电所低压室"
            }
          ]
        }
      ]
    },
    {
      "id": "3",
      "label": "炼钢厂",
      "type": "1",
      "children": [
        {
          "id": "31",
          "label": "熔融金属及吊运区域",
          "type": "2",
          "children": [
            {
              "id": "311",
              "type": "3",
              "label": "8号吊点鞍马座"
            },
            {
              "id": "312",
              "type": "3",
              "label": "8号起吊点右"
            }
          ]
        },
        {
          "id": "32",
          "label": "区域监控",
          "type": "2",
          "children": [
            {
              "id": "321",
              "type": "3",
              "label": "测试点33"
            },
            {
              "id": "322",
              "type": "3",
              "label": "原料跨1"
            },
            {
              "id": "323",
              "type": "3",
              "label": "板坯LH钒铁柜"
            }
          ]
        },
        {
          "id": "33",
          "label": "罐号识别",
          "type": "2",
          "children": [
            {
              "id": "331",
              "type": "3",
              "label": "修罐间东头"
            }
          ]
        }
      ]
    },
    {
      "id": "4",
      "label": "冷轧厂",
      "type": "1",
      "children": [
        {
          "id": "41",
          "label": "轧钢作业区",
          "type": "2",
          "children": [
            {
              "id": "411",
              "type": "3",
              "label": "轧机主控室"
            }
          ]
        },
        {
          "id": "42",
          "label": "普冷作业区",
          "type": "2",
          "children": [
            {
              "id": "421",
              "type": "3",
              "label": "原料库1"
            },
            {
              "id": "422",
              "type": "3",
              "label": "原料库2"
            }
          ]
        },
        {
          "id": "43",
          "label": "镀锌作业区",
          "type": "2",
          "children": [
            {
              "id": "431",
              "type": "3",
              "label": "生产运行检测"
            },
            {
              "id": "432",
              "type": "3",
              "label": "轧机高压室"
            }
          ]
        },
        {
          "id": "44",
          "label": "点检维护作业区",
          "type": "2",
          "children": [
            {
              "id": "441",
              "type": "3",
              "label": "退火炉4"
            },
            {
              "id": "442",
              "type": "3",
              "label": "退火炉1"
            }
          ]
        }
      ]
    }
  ]

vue遍历包含数组的对象

最近开发自己博客,在遍历对象类型数据时候,怎么也拿不到,尝试过两层遍历都不行,最终利用巧计解决了,记录下来:

请求来拿到后数据格式是下面这种

data(){
    return{
      noticeList:{
        notice:["aaaaa","bbbb","cccc"],
        times:[1564707990252,1564708337658,1564707990252]
      },
    }
  },

最终在html中这样遍历

<li v-for="(text,index) in noticeList.notice" :key="index">
  {{text}}<span>{{noticeList.times[index] | formatDate}}</span>
</li>

最重要的一点是要对象中两个数组的index对应的值是相对应的值。遍历对象中其中一个数组,另外一个数组用遍历过程中的index来获取其中对应的值,非常巧妙的一个办法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解读vue项目防范XSS攻击问题

    解读vue项目防范XSS攻击问题

    这篇文章主要介绍了解读vue项目防范XSS攻击问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue单页面在微信下只能分享落地页的解决方案

    vue单页面在微信下只能分享落地页的解决方案

    这篇文章主要介绍了vue单页面在微信下只能分享落地页的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • vue flex 布局实现div均分自动换行的示例代码

    vue flex 布局实现div均分自动换行的示例代码

    这篇文章主要介绍了vue flex 布局实现div均分自动换行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • vuex中...mapstate和...mapgetters的区别及说明

    vuex中...mapstate和...mapgetters的区别及说明

    这篇文章主要介绍了vuex中...mapstate和...mapgetters的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Vue-Element-Admin集成自己的接口实现登录跳转

    Vue-Element-Admin集成自己的接口实现登录跳转

    关于这个Vue-element-admin中的流程可能对于新的同学不是很友好,所以本文将结合实例代码,介绍Vue-Element-Admin集成自己的接口实现登录跳转,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 关于vue组件事件属性穿透详解

    关于vue组件事件属性穿透详解

    今天小编就为大家分享一篇关于vue组件事件属性穿透详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue3+vite+vant项目下按需引入vant报错Failed to resolve import的原因及解决方案

    vue3+vite+vant项目下按需引入vant报错Failed to resolve import的原因及解决

    这篇文章主要给大家介绍了关于vue3+vite+vant项目下按需引入vant报错Failed to resolve import的原因及解决方案,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 详解在vue-cli中使用graphql即vue-apollo的用法

    详解在vue-cli中使用graphql即vue-apollo的用法

    这篇文章主要介绍了详解在vue-cli中使用graphql即vue-apollo的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue中如何防止用户频繁点击按钮详解

    vue中如何防止用户频繁点击按钮详解

    在后台使用过程中经常会因为按钮重复点击,而造成发送多次重复请求 以下方法可以避免这种情况,下面这篇文章主要给大家介绍了关于vue中如何防止用户频繁点击按钮的相关资料,需要的朋友可以参考下
    2022-09-09
  • Vue加入购物车判断token添加登录提示功能

    Vue加入购物车判断token添加登录提示功能

    加入购物车,是一个登录后的用户 才能进行的操作,所以需要进行鉴权判断,判断用户token是否存在,这篇文章主要介绍了Vue加入购物车判断token添加登录提示,需要的朋友可以参考下
    2023-11-11

最新评论