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

这个方法如果是对于下面的三级树的话可以拿到爷爷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来获取其中对应的值,非常巧妙的一个办法。

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

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

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. html5使用canvas实现弹幕功能示例

    这篇文章主要介绍了html5使用canvas实现弹幕功能示例的相关资料,需要的朋友可以参考下

  3. 前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)

    这篇文章主要介绍了前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. H5 canvas实现贪吃蛇小游戏

    本篇文章主要介绍了H5 canvas实现贪吃蛇小游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. ios – parse.com用于键,预期字符串的无效类型,但是得到了数组

    我尝试将我的数据保存到parse.com.我已经预先在parse.com上创建了一个名为’SomeClass’的类.它有一个名为’mySpecialColumn’的列,其数据类型为String.这是我尝试使用以下代码保存数据的代码:如果我运行这个我得到:错误:密钥mySpecialColumn的无效类型,预期字符串,但得到数组这就是我在parse.com上的核心外观:有谁知道我为什么会收到这个错误?

  6. ios – 上下文类型’NSFastEnumeration’不能与数组文字一起使用

    斯威夫特3,你会这样做吗?解决方法正如您所发现的,您不能使用as-casting将数组文字的类型指定为NSFastEnumeration.您需要找到一个符合NSFastEnumeration的正确类,在您的情况下它是NSArray.通常写这样的东西:

  7. ios – 获取资产目录文件夹中所有图像的数组

    在iOS中,是否可以获取资产目录文件夹中的图像数组?我不确定为什么会对此进行投票.我真的不知道从哪里开始.我的另一种方法是创建文件夹中所有文件的plist,但它似乎是多余的.我无法添加任何代码,因为我会添加什么?

  8. ios – 来自调试器的消息:由于内存问题而终止

    我的应用程序使用Geojson文件.我使用MapBoxSDK将MGLpolyline添加到地图中.但问题是我的文件太大,以至于应用程序崩溃并收到错误:来自调试器的消息:由于内存问题而终止.我在第一次循环时面对66234个对象.我试图将数组块化为新数组,但没有成功.请帮我解决问题.这是我在地图上绘制的代码,这里是我的testprojectongithubuseXcode8.1如果有任何不同的第三方可

  9. ios – Swift – 使用字典数组从字典访问数据时出错

    我有一个非常简单的例子,说明我想做什么基本上,我有一个字典,其值包含[String:String]字典数组.我把数据填入其中,但当我去访问数据时,我收到此错误:Cannotsubscriptavalueoftype‘[([String:String])]?’withanindexoftype‘Int’请让我知道我做错了什么.解决方法您的常量数组是可选的.订阅字典总是返回一个可选项.你必须打开它.更

  10. ios – 在Swift中使用“Map”创建两个数组的超集

    假设我有两个数组:我想组合两个数组,以便我得到一个输出我该怎么做呢?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部