Vue Iview Tree插件的无限层

2023-05-16

Iview


<template>
    <Tree :data="baseData" show-checkbox multiple></Tree>
</template>
<script>
    export default {
        data () {
            return {
                baseData: []
            }
        },
        methods:{
            getTree(){
                var start = new Date().getTime();//起始时间
                //准备数据
                let testData = {
                    "department": [
                        {
                            "departmentName": "测试1",
                            "departmentDesc": "盛达康网络",
                            "parentId": "",
                            "id": "594a28fb1c8652a01f0301"
                        },
                        {
                            "departmentName": "测试-一级子级",
                            "parentId": "594a28fb1c8652a01f0301",
                            "id": "594a3910202469941"
                        },
                        {
                            "departmentName": "测试-二级子级",
                            "parentId": "594a3910202469941",
                            "id": "594a391020246994asasd1"
                        },
                        {
                            "departmentName": "盛达康",
                            "departmentDesc": "盛达康网络",
                            "parentId": "",
                            "id": "594a28fb1c8652a01f030126"
                        },
                        {
                            "departmentName": "开发",
                            "parentId": "594a28fb1c8652a01f030126",
                            "id": "594a3910202469941c349d7c"
                        },
                        {
                            "departmentName": "运营",
                            "parentId": "594a28fb1c8652a01f030126",
                            "id": "594a4509202469941c349d7f"
                        },
                        {
                            "departmentName": "人事",
                            "parentId": "594a28fb1c8652a01f030126",
                            "id": "59522e3ef30415281805d39f"
                        },
                        {
                            "departmentName": "瞧瞧",
                            "parentId": "594a3910202469941c349d7c",
                            "id": "597842fc51ec7f80118aa94c"
                        },
                        {
                            "departmentName": "测试层",
                            "parentId": "594a4509202469941c349d7f",
                            "id": "5978436751ec7f80118aa94d"
                        },
                        {
                            "departmentName": "测试1",
                            "parentId": "5978436751ec7f80118aa94d",
                            "id": "5979ad338c9082580984cf0a"
                        },
                        {
                            "departmentName": "测试2",
                            "parentId": "5979ad338c9082580984cf0a",
                            "id": "5979ad418c9082580984cf0b"
                        },
                        {
                            "departmentName": "测试3",
                            "parentId": "5979ad418c9082580984cf0b",
                            "id": "5979ad568c9082580984cf0c"
                        },
                        {
                            "departmentName": "测试4",
                            "parentId": "5979ad568c9082580984cf0c",
                            "id": "5979ad648c9082580984cf0d"
                        }
                    ]
                }
                var data = testData.department
                let treedata = []
                //查找最顶层
                let len = data.length
                for(let j=0;j<len;j++){
                    data[j].expand = false
                    data[j].title = data[j].departmentName
                    if(data[j].parentId == ""){
                        treedata.push({
                            "expand":true,
                            "title":data[j].departmentName,
                            "id":data[j].id
                        })
                    }
                }
                //找到跟最高层id相关的子子孙孙,并给子孙添加lev
                var treedataLevs =[]
                for(let h=0,ls=treedata.length;h<ls;h++){
                    treedataLevs.push({
                        treedataLev:sonsTree(data,treedata[h].id)
                    })
                }
                console.log(treedataLevs)
                for(let p=0,lq=treedataLevs.length;p<lq;p++){
                    var treedataLev = treedataLevs[p].treedataLev
                    //找到最高层的lev
                    var maxLev = 0
                    for(let i=0,lt=treedataLev.length;i<lt;i++){
                        if(parseInt(treedataLev[i].lev) > maxLev){
                            maxLev = parseInt(treedataLev[i].lev)
                        }else{
                            maxLev = maxLev
                        }
                    }
                    //比较当前层和上一层的数据,然后做处理
                    var needLev = maxLev
                    var maxLevTree = []
                    var maxLevTreePrev = []
                    for(let m=0;m<maxLev;m++){
                        maxLevTree = getLevArr(treedataLev,needLev)
                        maxLevTreePrev = getLevArr(treedataLev,needLev-1)
                        for(var j=0,lp=maxLevTreePrev.length;j<lp;j++){
                            maxLevTreePrev[j].children = new Array()
                            for(var i=0,lm=maxLevTree;i<lm.length;i++){
                                if(maxLevTree[i].parentId == maxLevTreePrev[j].id){
                                    maxLevTreePrev[j].children.push(maxLevTree[i])
                                }
                            }
                        }
                        needLev--
                    }
                    treedata[p].children = maxLevTreePrev
                }
                
                this.baseData = treedata
                //找出同一级的数据
                function getLevArr(arr,lev){
                    var newarr = []
                    for(let i=0,la=arr.length;i<la;i++){
                        //这里对arr 的children 做处理
                        arr.children = new Array()
                        if(parseInt(arr[i].lev) == lev){
                            newarr.push(arr[i])
                        }
                    }
                    return newarr
                }
                //给每个数据添加一个lev
                function sonsTree(arr,id){
                    var temp = [],lev=0;
                    var forFn = function(arr, id,lev){
                        for (var i = 0; i < arr.length; i++) {
                            var item = arr[i];
                            if (item.parentId==id) {
                                item.lev=lev;
                                temp.push(item);
                                forFn(arr,item.id,lev+1);
                            }
                        }
                    };
                    forFn(arr, id,lev);
                    return temp;
                }
                var end = new Date().getTime();//结束时间
                console.log("Tree初始化的时间是"+(end - start)+"ms")//返回函数执行需要时间
            }
        },
        created:function(){
            this.getTree()
        }
    }
</script>

啥也不说了 看代码吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue Iview Tree插件的无限层 的相关文章

  • D3.js 在径向树中的元素之间添加链接(分层边缘捆绑元素)

    几个月前 我尝试过使用 d3 js 将分层边缘捆绑和径向 Reingold Tilford 树结合起来 https stackoverflow com questions 39150514 d3 js combining hierarchi
  • 静止搜索性能

    这是一个双重问题 我组装了一个简单的国际象棋引擎 它执行 Alpha Beta 搜索 最后执行静止搜索 静止搜索正在影响性能 问题是 这是可以接受的性能影响吗 如果不是 那么应该采取什么措施来解决这个问题 下图给出了性能影响 请注意 这些统
  • C++ 中的动态树

    我想制作一棵树 每个节点都可以有一些子节点 但我不知道它们的数量 树必须在小内存中使用 无额外数据 以每个节点的恒定时间进行编码 我认为我将创建具有值和子属性 值是 int 子属性是堆栈 的类 Tree 以及指向该树中每个节点的指针数组 我
  • sparql 主题的完整树

    例如 当我有一个人图时 例如约翰和约翰有工作地址 家庭地址 电话号码 关系等 是否有可能在不知道它是什么的情况下检索与 john 及其子类相关的所有内容 这样我就可以检索例如以下内容 John lt address lt house num
  • 根据查找 NP 头的规则在 NLTK 和 stanford 解析中查找名词短语的头

    一般来说 名词短语的中心词是位于 NP 最右边的名词 如下所示 树是父 NP 的中心词 所以 ROOT S NP PP
  • 使用STL的红黑树内部实现

    我知道我的STL g 4 x x附带 使用红黑树来实现地图等容器 是否可以直接使用STL内部的红黑树 如果是这样 怎么办 如果不是 为什么不 为什么STL不公开红黑树 令人惊讶的是 我无法使用谷歌找到答案 编辑 我正在研究使用红黑树作为插入
  • 可折叠树示例中的 d3.js v4 古怪链接转换

    如果您玩下面的可折叠树 您会发现当您到达树的末尾并展开和折叠节点时 这些线正在做一些古怪的事情 我不完全确定是什么驱动了这种行为 或者我的重写是否的在此输入链接描述 https bl ocks org mbostock 4339083完全没
  • B 树和 2-3-4 树之间的区别

    B 树和 2 3 4 树有什么区别 另外 你如何找到每个的最大和最小高度 链接到维基百科 http en wikipedia org wiki 2 3 4 tree and引用 2 3 4 树是 4 阶 B 树 A 2 3 4 is a B
  • 如何在 Clojure 中遍历一棵树,同时收集每个节点节点的值?

    我想创建一个函数来收集二叉树中每个节点的值 在 ClojureDocs 中 我发现了几个用于遍历树 图的函数 例如 tree seq prewalk 和 postwalk https clojuredocs org clojure core
  • 创建二叉树的时间复杂度

    我正在尝试从提供的源创建一棵树 要添加到树中的 2 个节点 以及应添加这 2 个新闻节点的节点 为了找到该节点在树中的位置 我使用了中序遍历 该遍历的时间复杂度为 O n 因此 如果要在树中添加 n 个节点 则创建整个树的时间复杂度为 O
  • 如何递归探索Python嵌套字典? [复制]

    这个问题在这里已经有答案了 我很好奇是否有一种方法可以在 python 中递归地探索嵌套字典 我的意思是 假设我们有一个如下示例 d a b c 1 2 3 获取最里面字典的内容需要什么代码 c 1 2 3 遍历a and b 在这种情况下
  • 寻找成熟的 M-Tree 实现 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个成熟的 java M Tree 实现 甚至任何 M Tree 实现 除了我找到的唯一实现 http en wikipedia
  • 绘制java类的依赖关系图

    嘿嘿 我正在寻找像 JDepend 这样的工具来为 java 类文件绘制图表 JDepend 看起来很好 但它没有从 deps 中解析 deps 也许我只是缺少一些特殊选项 直接输出为 dot 格式或图像会很好 谢谢 你可以试试Java依赖
  • 二叉树实现C++

    二叉树插入 include stdafx h include
  • 非二叉树的中序树遍历

    对于比二叉树更宽的树 术语 中序遍历 是否有明确定义的含义 或者 前 和 后 顺序是唯一有意义的 DFS 类型吗 我的意思是与n每个节点 gt 2 个子节点 我猜是为了n这甚至可能意味着之后要转到 根 n 2孩子们 但这曾经这样使用过吗 那
  • 在应用 varImp 函数时使用带插入符号的 xgbTree 方法和目标变量的权重时出现非树模型错误

    当我使用 Caret 包中的 train 函数创建模型以使用权重进行梯度提升时 在使用 varImp 函数时出现错误 表示它没有检测到树模型 但当我去掉重量时它就起作用了 下面的代码产生错误 set seed 123 model weigh
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用
  • 如何在 Flutter 的 widget 树中打开新的 MaterialPageRoute 作为子项

    在下面的示例中 当我推送新的 MaterialPageRoute 时 它 会在与 Flutter 小部件树中的 Home 小部件相同的级别上创建 我希望将它作为小部件 Home 的子部件 因此 Home 将是 Child 小部件的父部件 这

随机推荐

  • Spring注解@Component、@Repository、@Service、@Controller区别 .

    Spring 2 5 中除了提供 64 Component 注释外 xff0c 还定义了几个拥有特殊语义的注释 xff0c 它们分别是 xff1a 64 Repository 64 Service 和 64 Controller 在目前的
  • sql 语句中如何写判断

    当ID为26时 xff0c 查询的result是ok span class token keyword select span name span class token punctuation span span class token
  • 光流定位原理是什么??【转】

    转自 xff1a https www zhihu com question 35980316 Jessie Lee HIT 控制 无人机 光流是测速算法 xff0c 并不是直接定位的 简单理解 xff0c 光流就是通过检测图像中光点和暗点的
  • 算法杂货铺——分类算法之决策树(Decision tree)

    3 1 摘要 在前面两篇文章中 xff0c 分别介绍和讨论了朴素贝叶斯分类与贝叶斯网络两种分类算法 这两种算法都以贝叶斯定理为基础 xff0c 可以对分类及决策问题进行概率推断 在这一篇文章中 xff0c 将讨论另一种被广泛使用的分类算法
  • 01-嵌入式入门-如何看原理图

    最近由于找到的工作是偏于嵌入式方向 xff0c 因此又重新开始学习已经丢弃两年的知识 新手学习知识感觉有一个通病 xff1a 喜欢收集各种各样的视频 资料 xff0c 网盘里收藏一大堆 xff0c 但是却从没有打开看过 xff0c 到头来还
  • MAVLink v1.0详解——结构

    本文针对 MAVLink v1 0版本 xff0c 协议版本 xff1a 3 MAVLink是为微型飞行器MAV xff08 Micro Air Vehicle xff09 设计的 xff08 LGPL xff09 开源的通讯协议 是无人飞
  • ECMAScript6——数组操作方法_总结篇

    ES6 gt 数组的方法 加粗为ES6新增的方法 1 pop 删除数组的最后一个元素 xff0c 把数组的长度减1 xff0c 并且返回它被删除元素的值 xff0c 如果数组变为空 xff0c 则该方法不改变数组 xff0c 返回undef
  • 网络工程师十个常见面试问题

    1 1 简单说一下OSI七层 Osi模型是一个工业的标准 它为现在的互联网提供了很大的贡献 是一个逻辑上的规范和标准 xff0c 很多厂商都要遵循它 他定义了七层每一层都有不同的功能和规范 物理层 物理层定义了设备接口上的一些电子电气化的标
  • 像素、分辨率、DPI

    Q xff1a 我们平时买数码相机时 xff0c 说的200万像素 xff0c 300万像素 xff0c 这个像素是什么意思 xff1f A xff1a 像素 xff08 Pixel xff09 是由Picture和Element这两个单词
  • Apache 目录索引样式 mod_autoindex

    apache 的目录索引样式用的mod autoindex模块 一般默认为开启状态 我们直接配置httpd conf文件 讲如下内容加到HTTD CONF Options Indexes FollowSymLinks IndexOption
  • ubuntu网卡名称变化的解决方法

    在chinacache工作时 xff0c 遇到了东方网力的客户 xff0c 需要安装使用ubuntu系统 xff0c 每个服务器有4个网口 xff0c 在做bond时 xff0c 发现部分网卡漂移 xff0c 为了解决这个 xff0c 搜索
  • C# 给DataGridView加多选框

    span class token comment 多选框 span DataGridViewCheckBoxColumn dgCheck span class token operator 61 span new DataGridViewC
  • Java架构进阶之路——阿里大牛强力推荐书单(附赠电子版)

    1 深入理解Java虚拟机 xff1a JVM高级特性与最佳实践 本书适合所有Java程序员 系统调优师和系统架构师阅读 共分为五大部分 xff0c 围绕内存管理 执行子系统 程序编译与优化 高效并发等核心主题对JVM进行了全面而深入的分析
  • ModemManager

    ModemManager是D Bus激活的守护进程 xff0c 用来控制移动宽带 xff08 2G 3G 4G xff09 设备和连接 xff0c 提供统一的高层API接口 说白了就是可以用来管理上网卡 ModemManager可以管理内置
  • odroidxu4linux,2019年值得期待的5个树莓派替代品

    说到卡片电脑 xff0c 树莓派是当之无愧的热门 这款售价35美元的微型计算机已经在全球范围内吸引了众多爱好者 xff0c 因为它能够以商业设备的一小部分价格执行基于PC的功能 当然 xff0c 它或许不是最强大或最便宜的微型计算机 xff
  • ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic

    Publisher Node 不同于cpp文件一般存在package下的src文件夹 xff0c python文件一般存储在package下的scripts文件夹下 1 2 3 4roscd beginner tutorials scrip
  • 轨迹系列1——一种基于路网图层的GPS轨迹优化方案

    文章版权由作者李晓晖和博客园共有 xff0c 若转载请于明显处标明出处 xff1a http www cnblogs com naaoveGIS 1 背景 GPS数据正常情况下有20M左右的偏移 xff0c 在遇到高楼和桥梁等情况下偏移会更
  • 材料研究方法

    编程是非常有意思的 xff0c 可是作为材料人 xff0c 学好材料才是比较重要的事情 xff0c 下面记录一些知识点 光学透镜的成像原理 光的折射 光在均匀介质中沿直线传播 在不同介质中光的传播速度不同 当光从一种介质传播到另一种介质中去
  • [微信小程序系列] 动画案例之圆点沿着圆圈运动

    作者 xff1a 滴滴公共前端团队 Tawnia 滴滴作为第一批的小程序开发者 xff0c 我们也大量地用到了动画 xff0c 积累了一些经验 xff0c 由于市面上的小程序动画案例很少 xff0c 我们也分享一部分我们做过的案例 xff1
  • Vue Iview Tree插件的无限层

    Iview lt template gt lt Tree data 61 34 baseData 34 show checkbox multiple gt lt Tree gt lt template gt lt script gt exp