js 递归总结
1.根据子id 递归查找所有父级 id 主要用于vue element 中 Cascader 级联选择器展示 在编辑中回显默认展示
tree 数据
var arr = [{
"label": "文件夹",
"parentId": null,
"id": "0",
"children": [{
"label": "文件夹1",
"parentId": "0",
"id": "1",
"children": [{
"label": "文件夹1-1",
"parentId": "1",
"id": "1.1",
"children": null
},
{
"label": "文件夹1-2",
"parentId": "1",
"id": "1.2",
"children": null
},
{
"label": "文件夹1-3",
"parentId": "1",
"id": "1.3",
"children": [{
"label": "文件夹1-3-1",
"parentId": "1.3",
"id": "1.3.1",
"children": [{
"label": "文件夹1-3-1-1",
"parentId": "1.3.1",
"id": "1.3.1.1",
"children": null
}]
},
{
"label": "文件夹1-3-2",
"parentId": "1.3",
"id": "1.3.2",
"children": null
},
{
"label": "文件夹1-3-3",
"parentId": "1.3",
"id": "1.3.3",
"children": null
}
]
}
]
},
{
"label": "文件夹2",
"parentId": "0",
"id": "2",
"children": [{
"label": "文件夹2-1",
"parentId": "2",
"id": "2.1",
"children": null
}]
},
{
"label": "文件夹3",
"parentId": "0",
"id": "3",
"children": null
}
]
}];
递归查找
//递归找父级id
getParentIds(treeData, nodeId) {
var arrRes = [];
if(treeData.length == 0) {
if(!!nodeId) {
arrRes.unshift(nodeId);
}
return arrRes;
}
let rev = (data, nodeId) => {
for(var i = 0, length = data.length; i < length; i++) {
let node = data[i];
if(node.id == nodeId) {
arrRes.unshift(nodeId);
rev(treeData, node.parentId);
break;
} else {
if(!!node.children) {
rev(node.children, nodeId);
}
}
}
return arrRes;
};
arrRes = rev(treeData, nodeId);
return arrRes;
},
结果
console.log(getParentIds(arr,'1.3.1')) //["0", "1", "1.3", "1.3.1"]
2. 删除children:[] 存在且为空的情况 主要用于vue element 中 Cascader 级联选择器展示
var tree = [{
value: 'ziyuan',
label: '资源',
children: [
{
value: 'axure',
label: 'Axure Components',
children: []
},
{
value: 'sketch',
label: 'Sketch Templates',
children: []
},
{
value: 'jiaohu',
label: '组件交互文档',
children: []
}
]
},
{
value: 'zujian',
label: '组件',
children: [
{
value: 'layout',
label: 'Layout 布局',
children: []
},
{
value: 'icon',
label: 'Icon 图标',
children: []
}
]
}
];
function render(arr) {
for(let i = 0; i < arr.length; i++) {
if(arr[i] && arr[i].children.length == 0) {
delete arr[i].children
}
if(arr[i].children && arr[i].children.length > 0) {
render(arr[i].children)
}
}
return arr
}
console.log(render(tree))
//打印如下:
已经删除空的children

js 递归总结的更多相关文章
- js递归遍历多维数组并在修改数组的key后返回新的多维数组
我司最近正在用VUE做一个基于用户权限显示不同左侧菜单的后台管理系统,接口会根据用户的权限不同返回不同的菜单名称.URL等,前端要将这些菜单名称及URL动态添加到系统的左侧,这里就用到了vue-rou ...
- 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能
大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...
- js 递归调用
js递归调用 function fact(num) { ) { ; } else { ); } } 以下代码可导致出错: var anotherFact = fact; fact = null; al ...
- 关于js回调方法 js递归时使用方法
js中递归调用本身可以这样: function a1(n){ a1(n)}但是如果需要在参数n进行自增的情况下判断会出错: function a1(n){ if(n>10) return 'aa ...
- Vue.js 递归组件实现树形菜单
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = tr ...
- js 递归学习
作用:将一些复制的算法变为简单,比如:(举例子)计算数组 var a =[1,3,4,6,7,8]的长度:求 5!的值,也可以做搜索用等. //求数组的长度function len(arry){ i ...
- js递归错误
错误信息:Uncaught RangeError: Maximum call stack size exceeded 问题代码: js代码:$(function(){ selectTog ...
- 用Vue.js递归组件构建一个可折叠的树形菜单
在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', { template: `<!--Invoking myself! ...
- Vue.js递归组件实现动态树形菜单
使用Vue递归组件实现动态菜单 现在很多项目的菜单都是动态生成的,之前自己做项目也是遇到这种需求,翻看了官网案例,和网上大神的案例.只有两个感觉,官网的案例太简洁,没有什么注释,看起来不太好理解,大神 ...
- js递归获取html页面所有标签
js原生递归获取,直接源码 : <script> var child = document.children; var arr = [];//用来存放获取到的所有的标签 function ...
随机推荐
- Heroku学习 - 利用Heroku app实现 OrgA 查询Org B 的数据数据
最近研究了一番如何通过Heroku应用对OrgA开放一个接口,参数传递的是一个SQL,APP的负责将SQL通过callout的形式调用目标OrgB Rest API来获取数据并返回给OrgA.我是用的 ...
- VSCode前端 插件
https://www.cnblogs.com/karthuslorin/p/8577224.html
- Sigmoid非线性激活函数,FM调频,胆机,HDR的意义
前几天家里买了个二手车子,较老,发现只有FM收音机,但音响效果不错,车子带蓝牙转FM,可以手机蓝牙播放音乐,但经过几次转换以及对FM的质疑,所以怀疑音质是否会剧烈下降,抱着试试的态度放了一个手机上的音 ...
- XML学习笔记——关于XML解析器
本篇文章基于W3C而写 在Firefox及其他浏览器中的XML解析器(除IE) var xmlDoc=document.implementation.createDocument("&quo ...
- 关于Error executing aapt的问题
这两天装了ubuntu 14.0.4系统,在这个系统上装了eclipse的android开发环境.原以为一切顺利,结果开发环境装完导入工程后,工程提示有红叉. R文件不能自动生成,按R文件不能自动生成 ...
- Treap基本用法总结
Treap=Tree+Heap 起名的人非常有才 Treap是啥? 一棵二叉搜索树可能退化成链,那样各种操作的效率都比较低 于是可爱的Treap在每个节点原先值v的基础上加了一个随机数rnd,树的形 ...
- 10、python函数
前言:本文主要介绍python函数的定义和调用.函数的参数.函数的作用域.内置函数. 一.函数的定义和调用 1.函数的作用 对特定的一些功能进行封装,提高代码的重用率,进而提升开发的效率,格式: de ...
- 机器学习环境配置系列五之keras2
keras一个大坑就是配置文件的问题,网上会给很多的误导,让我走了很多弯路. 1.安装keras2 conda install keras 2.环境配置 echo ‘{ "epsilon&q ...
- 深入理解大数据之——事务及其ACID特性
目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...
- 异想家Win10常用的软件推荐
本文总结一下自己日常使用Win10中涉及到的好用小软件,那些装机必备的软件在这里就不一一列出了.我重点想推荐一些自己觉得好用,符合自己偏好,但又不是每个人都知道的小工具: Rolan:一款类似于Win ...