1.json树数据查找所有父级--完成

json:树结构数据

var arrData = [{
"label": "中国",
"City": null,
"value": "",
"children": [{
"label": "河北",
"City": "",
"value": "",
"children": [{
"label": "石家庄",
"City": "",
"value": "1.1",
"children": null
},
{
"label": "保定",
"City": "",
"value": "1.2",
"children": null
},
{
"label": "邯郸",
"City": "",
"value": "1.3",
"children": [{
"label": "邯山区",
"City": "1.3",
"value": "1.3.1",
"children": [{
"label": "丛西街道",
"City": "1.3.1",
"value": "1.3.1.1",
"children": null
}]
},
{
"label": "涉县",
"City": "1.3",
"value": "1.3.2",
"children": null
},
{
"label": "丛台区",
"City": "1.3",
"value": "1.3.3",
"children": null
}
]
}
]
},
{
"label": "山东",
"City": "",
"value": "",
"children": [{
"label": "济南",
"City": "",
"value": "2.1",
"children": null
}]
},
{
"label": "北京",
"City": "",
"value": "",
"children": null
} ]
}];

递归查找父级数据

   // data:json nodeId:节点,arrRes:[] 返回的数据
function getParentNode(data, nodeId, arrRes) {
if (!data ) {
if (!nodeId) {
arrRes.unshift(nodeId);
}
return arrRes;
}
for (var i = , length = data.length; i < length; i++) {
let node = data[i];
if (node.value == nodeId) {
arrRes.unshift(nodeId);
console.log(arrData);
getParentNode(arrData, node.City, arrRes);
break;
}
else {
if (!!node.children) {
getParentNode(node.children, nodeId, arrRes);
}
} }
return arrRes;
};

调用: var res = getParentNode(arrData, '1.3.1', []);

2.再次修改后:

// data:json, nodeId:节点
function getParent(data2, nodeId2) {
var arrRes = [];
if (data2.length == ) {
if (!!nodeId2) {
arrRes.unshift(nodeId2);
}
return arrRes;
}
let rev = (data, nodeId) => {
for (var i = , length = data.length; i < length; i++) {
let node = data[i];
if (node.value == nodeId) {
arrRes.unshift(nodeId);
rev(data2, node.City);
break;
}
else {
if (!!node.children) {
rev(node.children, nodeId);
}
}
}
return arrRes;
};
arrRes = rev(data2, nodeId2);
return arrRes;
}

调用:var res = getParent(arrData, '1.3.1');

3. 正则表达式 查找的,递归20级深度的;

var getValue=(function () {
var arrData = [{
"label": "中国",
"City": null,
"value": "",
"children": [{
"label": "河北",
"City": "",
"value": "hb",
"children": [{
"label": "石家庄",
"City": "",
"value": "1.1",
"children": null
},
{
"label": "保定",
"City": "",
"value": "1.2",
"children": null
},
{
"label": "邯郸",
"City": "n",
"value": "bk",
"children": [{
"label": "邯山区",
"City": "bk",
"value": "1.3.1",
"children": [{
"label": "丛西街道",
"City": "1.3.1",
"value": "1.3.1.1",
"children": null
}]
},
{
"label": "涉县",
"City": "1.3",
"value": "1.3.2",
"children": null
},
{
"label": "丛台区",
"City": "1.3",
"value": "1.3.3",
"children": null
}
]
}
]
},
{
"label": "山东",
"City": "",
"value": "",
"children": [{
"label": "济南",
"City": "",
"value": "2.1",
"children": null
}]
},
{
"label": "北京",
"City": "",
"value": "",
"children": null
} ]
}];
console.log(JSON.stringify(arrData[]))
return function getValue(values){
var arrs=[];
var values=values;
var c=JSON.stringify(arrData[]);
var keys='';
if(arguments[]&&c.search(values)!=-){
for(var i=;i<;i++){
var newReg=new RegExp('\"City\"\:\"([^\"]+)\"\,\"value\"\:\"'+values);
if(values!=keys){
arrs.unshift(values)
}
if(c.search(newReg)!=-){
keys=c.match(newReg)[].replace(newReg,'$1')
arrs.unshift(keys);
values=keys;
}else{
arrs.unshift(null)
return arrs;
}
}}else{
return values
}
}
})(); console.log(getValue('1.3.1'))

4.Cascader 级联选择 组件 v-model的数据是一个数组类型,工作中如果需要回显的话,就需要传递所有父级元素的ID所组成的数组,但是后台只存放了目标元素的ID,所以只能自己去遍历数据获取了

用递归查找到ID的所属元素,然后把每一级的parentId一起返回。

转:https://blog.csdn.net/weixin_42869548/article/details/82012316

[{
"orgId": ,
"orgName": "校长办公室1",
"parentId": ,
"children": [{
"orgId": ,
"orgName": "校长办公室2",
"parentId": ,
"children": [{
"orgId": ,
"orgName": "校长办公室3",
"parentId": ,
}]
}]
}]
function buildParentList(arr){
arr.forEach(g =>
{
if(g.parentId != undefined) {
let pid = g['parentId']
let oid = g['orgId']
parentList[oid] = pid
}
if (g.children != undefined)
buildParentList(g['children'])
})
}
function findParent(idx){
if (parentList[idx] != undefined){
let pid = parentList[idx]
console.log(pid)
findParent(pid)
}
} buildParentList(list)
findParent(); // 0 1 2
findParent(); // 0 1
findParent(); // undefined

5.从上往下找下的

    function getParents(data, id) {
for (var i in data) {
if (data[i].value == id) {
return [];
}
if (data[i].children) {
var ro = getParents(data[i].children, value);
if (ro !== undefined)
return ro.concat(data[i].id);
}
}
console.log(ro);
}

js 递归树结构数据查找父级的更多相关文章

  1. Sqlserver如何递归查询层级数据将父级字段和本级某个字段合并?如何自定义用户函数并调用?

    开门见山,首先说下遇到的问题:前期系统地区字典表中,每个省市县只存了本级名称,没存完整的字段.如:肥西县隶属安徽省合肥市,表中就存了一个肥西县.现有需求需要将完整字段显示,由于系统已在线上运营,无法做 ...

  2. JS - 点击事件排除父级标签

    点击事件排除父级标签,这里使用的是stopPropagation()方法.event.stopPropagation(); 对了,这里还用了解除click事件,unbind. 下面这篇博文,介绍挺全的 ...

  3. JS-对象查找父级

    之前在寻找两个以上的父级,一直傻傻的用parent().parent()... 今天,需要写五个,当然以前也是写过五个的,但是今天总想着换个简单的方式,至少不要.parent().parent().p ...

  4. js动态绑定class(当前父级div下的子元素有没有这个class,有的话移除,没有的话添加)

    <div class="layui-inline" id=‘’   onclick="changeType(id)">                ...

  5. php中递归查找父级名称

    /** * 获取所属公司 * @param array 列表 * @param $id 上级ID * @return array */ private static function get_top_ ...

  6. JS获取节点的兄弟,父级,子级元素的方法(js获取子级获取到换行与空格元素-FF)

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 < ...

  7. js或jquery如何获取父级、子级、兄弟元素(包括祖级、孙级等)

    原生javascript方法: var a = document.getElementById("dom"); del_space(a); //清理空格 var b = a.chi ...

  8. dom node 查找父级parentNode

    var o = document.querySelectorAll("a[href='baidu.com']"); var p = o[o.length-1];console.lo ...

  9. js根据子目录数目显示父级目录

    需求:<ul>中<li>数量为0,则不显示<ul>以及<b>:<div>中<ul>数量为0,则不显示<div> 1. ...

随机推荐

  1. 21天学通C++学习笔记(九):类和对象

    1. 类和对象 现实中的人等事物往往具备一些特征并且可以做某些事情,要在程序中模拟这些事物,需要一个结构,将定义其属性(数据)以及其可用这些属性执行的操作(函数)整合在一起.这种结构就是类,而这种结构 ...

  2. layui与多级联动返填

    <script> layui.use(['form', 'layer'], function () { $ = layui.jquery; var form = layui.form() ...

  3. sun.misc.Unsafe.park(Native Method)

    关闭tomcat时或者重启tomcat时 log4j2 报错: sun.misc.Unsafe.park(Native Method) 异常信息: 30-Aug-2018 15:59:34.900 S ...

  4. 《Beginning Java 7》 - 3 - Equalty 判等

    == 用于判断是否为同一引用. 比如对于 String: System.out.println("abc" == "abc"); // Output: true ...

  5. SDOI2013 淘金

    题目链接:戳我 昨天做的题了,今天补一发题解. 是一个比较奇怪的数位DP.详细的我还是写代码注释里好了,感觉直接说不好描述. 代码如下: #include<iostream> #inclu ...

  6. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  7. [ActionScript 3.0] 获取TextFiled字符边框

    /***** * getCharBoundaries () 方法 :返回一个矩形,该矩形是字符的边框. * getCharIndexAtPoint() 方法基于鼠标单击的 localX 和 local ...

  8. css中的block与none

    *{ display:none; } div{ display:block; } div 会正常显示粗来吗?不会 因为*代表所有元素,包括div的父级元素html,body 父级元素都不显示了,子元素 ...

  9. origin显示三维曲面

    准备数据并选中数据: 这里如果只关心z<1部分的趋势,可以对Z轴范围进行调整,双击Z轴的数字: 然后修改显色条的范围,双击曲面: 最后让曲面最上面部分clip掉: 成功了:

  10. [转] 基于Gitlab CI搭建持续集成环境

    [From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577 前言 本文是在12月12号迅雷@赵兵在前端早读课第三 ...