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. [SDOI2009] HH的项链 | 莫队模板

    题目链接:戳我 题意:求区间中不同颜色的种类数 因为是要过知识点,所以又把这题拿出来做了一遍......这里就写两种方法吧 主席树做法 设pre[i]为第i个点上的颜色在前面序列中出现的最晚的一次的位 ...

  2. OI知识点|NOIP考点|省选考点|教程与学习笔记合集

    点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分 ...

  3. 【Oracle】安装注意事项

    装了卸载,卸载装,一会儿缺少配置功能,一会对一些莫名的命令操作不能顺利执行.于是还是选择了重装系统.(策略,与其纠结那些个抛错命令和那些烦人的长长的日志,不如重新装系统,这个绝对是最省时间的) 1.安 ...

  4. mysql主从同步错误,提示The server quit without updating PID file

    在安装完lnmp后,启动mysqld失败,提示 [root@centos-6 ~]# service mysqld start Starting MySQL [确定][root@centos-6 ~] ...

  5. [转] HTTP状态码错误代码

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...

  6. P4098 [HEOI2013]ALO 可持久化01Trie

    $ \color{#0066ff}{ 题目描述 }$ Welcome to ALO ( Arithmetic and Logistic Online).这是一个 VR MMORPG, 如名字所见,到处 ...

  7. [jvm]运行时数据区域详解

    了解虚拟机是怎么使用内存的,有助于我们解决和排查内存泄漏和溢出方面的问题.详解java虚拟机内存的各个区域,分析这些区域的作用服务对象以及可能发生的问题. 一.运行时数据区域 java虚拟机在执行ja ...

  8. 海思的一个 Makefile 解析

    Makefile 原文 include ../Makefile.param #ifeq ($(SAMPLE_PARAM_FILE), ) # SAMPLE_PARAM_FILE:=../Makefil ...

  9. Windows下Anaconda安装 python + tensorflow CPU版

    下载安装Anaconda 首先下载Anaconda,可以从清华大学的镜像网站进行下载. 安装Anaconda,注意安装时不要将添加环境变量的选项取消掉. 安装完成之后,在安装目录下cmd,输入: co ...

  10. C语言编译器和IDE的选择

    什么是编译器: CPU只认识几百个二进制形式的指令,C语言对CPU而言简直就是天书.C语言是用固定的词汇与格式组织起来,简单直观,程序员容易识别和理解. 这时候就需要一个工具,将C语言代码转换成CPU ...