查找树形数据的某个值
很多场景都需要使用树形数据,比如:一级菜单 - 二级菜单、省-市-区、公司-部门-小组、界-门-纲-目-科-属-种 等等。
数据结构通常如下所示(以下代码为ts写法):
const groupList: Group[] = [{groupId: '0',groupName: '江西省',isDefaultGroup: '0',children: [{groupId: '0-0',groupName: '赣州市',isDefaultGroup: '0',children: [{groupId: '0-0-0',groupName: '瑞金市',isDefaultGroup: '0',},],},],},{groupId: '1',groupName: '浙江省',isDefaultGroup: '1',children: [{groupId: '1-0',groupName: '杭州市',isDefaultGroup: '0',children: [{groupId: '1-0-0',groupName: '西湖区',isDefaultGroup: '0',},],},],},{groupId: '2',groupName: '江苏省',isDefaultGroup: '0',children: [{groupId: '2-0',groupName: '南京市',isDefaultGroup: '0',children: [{groupId: '2-0-0',groupName: '中华门',isDefaultGroup: '0',},],},],},
];
已知
groupId
为1-0-0
如何找到它对应的名字:西湖区
呢???
思路:
- 输入树形数据、需要匹配的字段、需要匹配字段的值、需要查找的字段。
- 遍历数组直到找出
groupId
为1-0-0
的对象。 - 保存结果并返回需要查找的字段的值。
知识点
- 闭包
- 递归
实现
// 以下代码有ts报错,知道怎么解决的请告诉我const findFieldValue = <T>(treeData: T[], key: string, value: string | number, field: string): string | number | boolean | null => {let res: string | number | null = null;const fn = (treeData: T[], key: string, value: string | number, field: K) => {if (!treeData?.length) return key;for (let index = 0; index < treeData.length; index++) {if (treeData[index][key] === value) {res = treeData[index][field];break;}if (treeData[index]?.children?.length) {fn(treeData[index].children, key, value, field);}}};fn(treeData, key, value, field);return res;
}
结果
cosole.log(findFieldValue(treeData, 'groupId', '1-0-0', 'title')) // 西湖区
查找树形数据的某个值相关推荐
- 非递归式查找树形数据
给你一棵树,怎么用非递归方式去查找里面满足要求的某些节点? 可以用队列来实现,举例如下: Android界面就是基于一棵树的结构来进行显示的,怎样通过一个ViewGroup,非递归式的找到它下面所有B ...
- python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)
前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...
- 动态开辟指定数量的线程来查找动态开辟的数组中的1000000数据中的值
1.项目包结构 array.h #ifndef _ARRAY_H_ #define _ARRAY_H_ /******************************************** ...
- 6-1 简单快速排序分数 10作者 唐艳琴单位 中国人民解放军陆军工程大学本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x)在整个数据中的排名(数据
6-1 简单快速排序 分数 10 全屏浏览题目 切换布局 作者 唐艳琴 单位 中国人民解放军陆军工程大学 本题要求实现一个函数,可快速查找给定x(保证是整个数据中其值存在,如果x有多个,查找第一个x) ...
- 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 遍历查找后坐力数据 | 尝试修改后坐力数据 )
文章目录 一.遍历后坐力数据 二.尝试修改后坐力数据 一.遍历后坐力数据 在上一篇博客 [Windows 逆向]CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内 ...
- 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 查找子弹数据的动态地址 | 查找子弹数据的静态地址 | 静态地址分析 | 完整流程 ) ★
文章目录 前言 一.查找子弹数据临时内存地址 二.查找子弹数据的静态地址 1.调试内存地址 05A59544 获取基址 05A59478 2.通过搜索基址 05A59478 获取内存地址 0E1DC1 ...
- Oracle查找重复数据
2019独角兽企业重金招聘Python工程师标准>>> -- 使用ROWID查找重复数据 -- PK_PSNDOC:查找该字段的重复数据值 -- LASTFLAG:条件过滤字段 SE ...
- php 处理树形数据,php实现的树形结构数据存取类实例
php实现的树形结构数据存取类实例 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: php实现的树形结构数据存取类实例.txt ] (友情提示:右键点上行txt文档 ...
- vue+element实现树状表格的增删改查;使用el-table树形数据与懒加载实现树状表格增删改查
以下代码可以直接复制使用 一.情景: 列表是一个树状表格,可以无限添加下级,以及对列表的某一行进行增删改查(目前查没有写). 原博链接 二.本篇是在原博主的代码基础上添加了部分功能. 功能1: 给树状 ...
最新文章
- java B2B2C Springboot仿淘宝电子商城系统-负载均衡之ribbon+feign
- HiveSQL常用数据处理语句
- 多方法调用 一个出错 集体回滚_一个@Transaction哪里来这么多坑?
- hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...
- js一行四个 超过自动换行_干货!零基础学JavaScript要掌握的四个基本常识
- Mac操作指南:废纸篓里的文件无法清除如何解决?
- VM安装CentOS6-相关NAT上网VM-tools安装
- 系统建模与仿真 - 电子书下载(高清版PDF格式+EPUB格式)
- 关于 TCP协议和HTTP关系 | TCP的三次握手和四次挥手
- oracle重建orainventory,重建oraInventory解决ORA-20001
- 转-Tensorflow之GPU和CPU
- 【江枫】用Perl的hash数组实现个性化监控
- sklearn模块之朴素贝叶斯:(二)伯努利模型的实现
- 顺序表的c语言结构体描述,顺序表的基本方法实现C语言版
- 磨金石教育分享||想转行学习插画,应该怎么做,需要什么基础?
- Centos配置CA(证书颁发机构)
- Gopher China 2019 讲师专访-滴滴出行/R lab 高级专家工程师杜欢
- newman执行测试_Newman的使用讲解
- openwrt下有线网设置详细过程
- 第七章 - 类的详细设计