求解:vue如何遍历数组对象中的数组。

发布于 2022-09-12 04:38:12 字数 854 浏览 11 评论 0

要遍历的数据:
这只展示了第一层。
image.png

list: [
     {
         id: 1,
         name: "第一层",
         child: [],
     },
     {
         id: 1,
         name: "第一层",
         child: [
             {
                 id: 2,
                 name: "第一层第二层",
                 child: [],
             },
        ],
     },
     {
         id: 1,
         name: "第一层",
         child: [
             {
                 id: 2,
                 name: "第一层第二层",
                 child: [
                     {
                         id: 3,
                         name: "第一层第二层第三层",
                         child: [],
                     },
                 ],
             },
         ],
     },
 ],
 

foreach写的方法,
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

郁金香雨 2022-09-19 04:38:12

递归组件上面都说了。各种组件库都有实现递归树组件的渲染的,通常直接用就好了。


另外一种方法是你可以把树结构压扁成列表结构,就可以v-for渲染出来的,相比递归组件要高效许多。
预览:
http://jsrun.net/ai2Kp/edit

function treeToList (tree) {
    const result = tree.map(i => (i.level = 0, i))
    for (let i = 0; i < result.length; i++) {
        if (!result[i].child) continue
        result[i].child.forEach(node => node.level = result[i].level + 1)
        result.splice(i + 1, 0, ...result[i].child)
    }
    return result
}

export default {
  data () {
    return {
      list: 'xxx'
    }
  },
  computed: {
    treeList () {
        return treeToList(this.list)
    }
  }
}

渲染:

<template>
    <div>
        <div
            v-for="node of treeList"
            :style="{
                paddingLeft: node.level * 20 + 'px'
            }"
            :key="node.id">
            {{ node.name }}
        </div>
    </div>
</template>
丑疤怪 2022-09-19 04:38:12

写一个组件,递归调用,js同理

酒中人 2022-09-19 04:38:12

页面结构是什么样的,树形结构嘛;是的话那就封装个递归组件

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文